我有以下工具類,在C#中創建。當從C#調用C#類的方法時,但不從VB.Net調用時工作
public class ObjectMapper<TSource, TTarget>
{
private Collection<Action<TSource, TTarget>> _mappings =
new Collection<Action<TSource, TTarget>>();
public void AddMapping(Action<TSource, TTarget> action)
{
_mappings.Add(action);
}
public void ApplyMappings(TSource source, TTarget target)
{
foreach (var mapping in _mappings)
{
mapping(source, target);
}
}
}
我可以使用此類將屬性從一個對象複製到另一個對象。我知道還有其他的選擇像AutoMapper,但這不屬於我的問題範圍。
當我從C#項目中使用這個類時,一切正常。單元測試通過等。下面是C#中這個類的使用示例(荷蘭語的道歉)。
// Arrange
// initialiseer auteur
Auteur auteur = new Auteur
{
Achternaam = "Loon",
Tussenvoegsel = "van",
Initialen = "P."
};
// initialiseer boek
Boek boek = new Boek
{
Auteur = auteur,
Titel = "Ravelijn",
Isbn13 = "9789025857813",
Druk = 1,
UitgaveJaar = 2011,
Uitgever = "Leopold B.V."
};
// initialiseer mapper
ObjectMapper<Boek, BibliotheekItem> mapper = new ObjectMapper<Boek, BibliotheekItem>();
mapper.AddMapping((bk, bib) => bib.Auteur = boek.Auteur.Initialen +
(string.IsNullOrEmpty(boek.Auteur.Tussenvoegsel) ? " " : " " + boek.Auteur.Tussenvoegsel + " ") +
boek.Auteur.Achternaam);
mapper.AddMapping((bk, bib) => bib.Titel = boek.Titel);
mapper.AddMapping((bk, bib) => bib.Uitgave = boek.Uitgever + ", " + boek.UitgaveJaar.ToString());
mapper.AddMapping((bk, bib) => bib.Type = BibliotheekItem.ItemType.BOEK);
mapper.AddMapping((bk, bib) => bib.Id = "ISBN13:" + bk.Isbn13);
// Act
BibliotheekItem bi = new BibliotheekItem();
mapper.ApplyMappings(boek, bi);
// Assert
Assert.AreEqual("P. van Loon", bi.Auteur, false);
Assert.AreEqual("Leopold B.V., 2011", bi.Uitgave, false);
當我嘗試從VB.Net項目中使用這個類時,我的目標對象的屬性保持爲空。 我真的一直無法找到原因。
Dim bron As New Bron
Dim doel As New Doel
bron.Prop1 = "Waarde 1"
bron.Prop2 = "Waarde 2"
Dim mapper As ObjectMapper(Of Bron, Doel) = New bogaarts.algemeen.ObjectMapper(Of Bron, Doel)
mapper.AddMapping(Function(b, d) d.Prop1 = b.Prop1)
mapper.AddMapping(Function(b, d) d.Prop2 = b.Prop2)
mapper.PasMappingsToe(bron, doel)
MessageBox.Show(doel.Prop1 & " : " & doel.Prop2)
有沒有人有一個想法,我忽略了什麼?
C#代碼正在向VB.Net代碼添加不同的映射,這可能是相關的。 – Jodrell 2014-12-02 15:24:08
'抱歉的荷蘭namings'這就是爲什麼你應該總是用英語恕我直言; - )... – ChrFin 2014-12-02 15:26:35
看看[元](http://meta.stackoverflow.com/questions/266563/do-non-英語單詞增加接受概率的提示/)來粗略猜測非英語命名如何影響常見StackOverflow用戶的行爲。 – nvoigt 2014-12-02 15:27:17