C# 将匿名对象类添加到匿名列表
我已经声明了这样一个匿名列表,它还包含联系人列表C# 将匿名对象类添加到匿名列表,c#,.net,list,generics,anonymous-types,C#,.net,List,Generics,Anonymous Types,我已经声明了这样一个匿名列表,它还包含联系人列表 var ContactGroup = new[] { new { ContactGroupKey = 0, ContactGroupTLK = 0, Desc = "", Contacts=new List<object>() } }.ToList(); var ContactGroup=new[]{new{ContactGroupKey=0,ContactGroupTLK=0,Desc=”“,Contacts=new List(
var ContactGroup = new[] { new { ContactGroupKey = 0, ContactGroupTLK = 0, Desc = "", Contacts=new List<object>() } }.ToList();
var ContactGroup=new[]{new{ContactGroupKey=0,ContactGroupTLK=0,Desc=”“,Contacts=new List()}}.ToList();
我尝试检查列表,如果ContactGroupKey存在,则仅更新联系人(定义为列表),否则插入新的contactgroup。但是,当我尝试在匿名列表中添加新的contactgroup时,它会抛出一个错误:“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;
}
while()
{
var触点=新{
ContactKey=Convert.ToInt64(DB[“ContactKey”,“0”]),
FirstName=DB[“FirstName”,“”].ToString(),
姓氏=DB[“姓氏”,“姓氏]。ToString(),
FullName=DB[“FullName”,“”].ToString(),
Street=DB[“bStreet”,“”].ToString(),
City=DB[“bCity”,“”].ToString(),
};
foreach(ContactGroup中的var项目)
{
if(item.ContactGroupKey==Contact.ClaimContactGroupKey)
{
项目.联系人.添加(联系人);
添加=真;
}
}
如果(!已添加){
ContactGroup.Add(新增){
ContactGroupKey=Convert.ToInt64(DB[“ContactGroupKey”,“0”]),
ContactGroupTLK=Convert.ToInt64(DB[“TranslationKey”,“0”]),
Desc=DB[“Description”,“”].ToString(),
联系人=发电机列表(联系人)
});
}
}//结束时
公共静态列表生成器列表(T itemOftype)
{
List newList=新列表();
返回newList;
}
匿名类型不打算离开当前方法。不能将它们传递给其他方法。您应该定义一个包含需要处理的属性的类。问题是您使用的匿名类型不同。您需要获得名称、类型和顺序匹配的属性。看看这个:
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
作为列表,其中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
,等等。)谢谢你的回复。我是你这本书的忠实粉丝。我知道创建类比使用匿名类型更有价值。我非常关心变量命名。我正在用类编写上面的代码。虽然编写类可能是最好的做法,但如果使用泛型或动态
参数,实际上可以将匿名类型变量传递给方法。