Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将匿名对象类添加到匿名列表_C#_.net_List_Generics_Anonymous Types - Fatal编程技术网

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
,等等。)

谢谢你的回复。我是你这本书的忠实粉丝。我知道创建类比使用匿名类型更有价值。我非常关心变量命名。我正在用类编写上面的代码。虽然编写类可能是最好的做法,但如果使用泛型或
动态
参数,实际上可以将匿名类型变量传递给方法。