2

我已经声明了一个这样的匿名列表,它还包含联系人列表

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;
 } 
4

2 回答 2

3

问题是您使用的匿名类型不一样。您需要让属性在名称、类型和顺序上匹配。看这个:

  ContactGroup.Add(new {
                       ContactGroupKey = Convert.ToInt64(DB["ContactGroupKey", "0"]),
                       ContactGroupTLK = Convert.ToInt64(DB["TranslationKey", "0"]),
                       Desc = DB["Description", ""].ToString(),
                       Contacts=GenerateList(Contact)
                       });

这将具有ContractGroupKeyContactGruopTLK作为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等)

于 2013-01-28T14:30:03.993 回答
0

匿名类型不打算离开当前方法。您不能将它们传递给其他方法。您应该定义一个包含您需要处理的属性的类。

于 2013-01-28T14:25:54.693 回答