我已经声明了这样的匿名列表,它还包含联系人列表
var ContactGroup = new[] { new { ContactGroupKey = 0, ContactGroupTLK = 0, Desc = "", Contacts=new List<object>() } }.ToList();
我尝试检查列表,如果ContactGroupKey存在,则仅更新联系人(定义为列表),否则插入新的联系人组。但当我试图在我的匿名列表中添加一个新的联系人组时,它会抛出一个错误“'System.Collections.Generic.List.Add(AnonymousType#2)'的最佳重载方法匹配'有一些无效的参数 “我第一次使用匿名列表。我试图在这种情况下避免上课。任何人都可以建议我在哪里犯了错误?
while()
{
var Contact= new {
ContactKey = Convert.ToInt64(DB["ContactKey", "0"]),
FirstName = DB["FirstName", ""].ToString(),
Surname = DB["Surname", ""].ToString(),
FullName = DB["Fullname", ""].ToString(),
Street = DB["bStreet", ""].ToString(),
City = DB["bCity", ""].ToString(),
};
foreach (var item in ContactGroup)
{
if (item.ContactGroupKey == Contact.ClaimContactGroupKey)
{
item.Contacts.Add(Contact);
added = true;
}
}
if(!added){
ContactGroup.Add(new {
ContactGroupKey = Convert.ToInt64(DB["ContactGroupKey", "0"]),
ContactGroupTLK = Convert.ToInt64(DB["TranslationKey", "0"]),
Desc = DB["Description", ""].ToString(),
Contacts=GenerateList(Contact)
});
}
}// End While
public static List<T> GenerateList<T>(T itemOftype)
{
List<T> newList = new List<T>();
return newList;
}
答案 0 :(得分:2)
问题是你使用的匿名类型不一样。您需要在名称,类型和顺序中匹配属性。看看这个:
ContactGroup.Add(new {
ContactGroupKey = Convert.ToInt64(DB["ContactGroupKey", "0"]),
ContactGroupTLK = Convert.ToInt64(DB["TranslationKey", "0"]),
Desc = DB["Description", ""].ToString(),
Contacts=GenerateList(Contact)
});
这将ContractGroupKey
和ContactGruopTLK
作为long
属性,Contacts
作为List<T>
,其中T
是您的另一种匿名类型。您需要将初始化更改为:
var sampleContact = new { ContactKey = 0L, /* etc */ };
var sampleContactList = new[] { sampleContact }.ToList();
var contactGroup = new[] { new { ContactGroupKey = 0L,
ContactGroupTLK = 0L,
Desc = "",
Contacts = sampleContactList } }.ToList();
可以工作 - 但你最好为此创建命名类。最终,感觉这些可能是您系统中的重要实体,因此值得将其作为命名类型进行建模。
(旁注:在你的命名中值得保持一致;通常局部变量是camelCased
,所以你应该使用contactGroup
而不是ContactGroup
等。)
答案 1 :(得分:0)
匿名类型不打算保留当前方法。您无法将它们传递给其他方法。您应该定义一个包含您需要处理的属性的类。