我想创建一个地图,其中属性对象的名称作为键,类型对象的列表作为值。
在我的情况下,我想要一张地图:
new
我可以提供联系人或地址列表。
我有一个方法来初始化我的地图,现在它是AbstractEntity,一个Adress和联系人的超类:
Dictionary<string, List<Object1 Or 2>> objectToListofObj1Or2 = new Dictionary<string, List<Object1 Or 2>>();
我这样做是为了预先选择很多rambComboBox,并在视图列表中选择相应的CodeAdress或CodeContact,如下所示:
public Dictionary<string, List<AbstractEntity>> InitializeMapping()
{
Dictionary<string, List<AbstractEntity>> objectToListContactCorrespondance1 = new Dictionary<string, List<AbstractEntity>>();
objectToListContactCorrespondance1["CodeContactFactAchatExterne"] = ContactsFacturationAchatExterne.Cast<AbstractEntity>().ToList();
//my key is the property name, value is my list already created, here is a List of type Contact
objectToListContactCorrespondance1["CodeContactContractAchatExterne"] = ContactsContractualisationAchatExterne.Cast<AbstractEntity>().ToList();
//here a list of type Adress
objectToListContactCorrespondance1["CodeAdresseContractAchatExterne"] = AdressesContractualisationAchatExterne.Cast<AbstractEntity>().ToList();
我的地图现在有效,我已经添加了FIRST()。但我的组合框并不是很好。用这一行选择(dataInit允许我初始化视图):
Dictionary<string, List<AbstractEntity>> mapping = InitializeMappingContact();
foreach (PropertyInfo propertyInfo in dataInit.GetType().GetProperties())
{
if (mapping.ContainsKey(propertyInfo.Name) && (alreadyIn.Where(code => code == propertyInfo.Name).ToList().Count == 0))
{
if (mapping[propertyInfo.Name].First().GetType() == typeof(Contact))
{
Contact test = (Contact)mapping[propertyInfo.Name].First();
propertyInfo.SetValue(dataInit, mapping[propertyInfo.Name].Count == 1 ? test.CodeContact : null, null);
}
else
{
Adresse test = (Adresse)mappingContact[propertyInfo.Name].First();
propertyInfo.SetValue(dataInit, mappingContact[propertyInfo.Name].Count == 1 ? test.CodeAdresse : null, null);
}
}
}
否则,如果我不使用foreach和Initialize方法,我必须手动逐行进行,如下所示:
propertyInfo.SetValue(dataInit, mappingContact[propertyInfo.Name].Count == 1 ? test.CodeContact : null, null);
我想这样做:
dataInit.CodeAdresseContractAchatSVD = AdressesContractualisationAchatSVD.Count == 1 ? AdressesContractualisationAchatSVD.First().CodeAdresse : null;
答案 0 :(得分:-1)
我必须检查地图中的列表是否为空,然后我才能得到我的列表类型:
foreach (PropertyInfo propertyInfo in dataInit.GetType().GetProperties())
{
if (mappingContact.ContainsKey(propertyInfo.Name) && (alreadyIn.Where(code => code == propertyInfo.Name).ToList().Count == 0))
{
if (mappingContact[propertyInfo.Name].FirstOrDefault() != null)
{
if (mappingContact[propertyInfo.Name].First().GetType() == typeof(Contact))
{
Contact test = (Contact)mappingContact[propertyInfo.Name].First();
propertyInfo.SetValue(dataInit, mappingContact[propertyInfo.Name].Count == 1 ? test.CodeContact : null, null);
}
else
{
Adresse test = (Adresse)mappingContact[propertyInfo.Name].FirstOrDefault();
propertyInfo.SetValue(dataInit, mappingContact[propertyInfo.Name].Count == 1 ? test.CodeAdresse : null, null);
}
}
}
}