我有一个AccountContacts类,其中包含一个数据成员联系人,它是ContactInfo类型的列表。
每个ContactInfo类都有两个成员。 1.包含ContactTypes(字符串)的列表2.联系对象。
所以,看起来像是
Class AccountContacts
{
List<ContactInfo> Contacts;
}
Class ContactInfo
{
List<string> ContactType;
Contact UserContact;
}
现在如果我有一个AccountContacts对象(ac),我怎样才能获得一个Contact对象,其中ContactInfo中的ContactType列表包含一个特定的字符串。
顺便说一下,每个ContactType列表都与其他ContactType列表不同。所以一次可以返回Contact对象。
我试过这样的事情。
Contact myContact = ac.Contacts.Find(c => c.ContactType.Contains("specificString")).UserContact;
我能够得到myContact。只是想知道有没有更好的方法呢?
答案 0 :(得分:4)
您正在使用Find
method,如果您的条件不匹配,则会产生null
结果,即没有ContactType
与您的输入相匹配。
当您拨打NullReferenceException
时,这会导致.UserContact
,因为您无法null.UserContact
。
null
:var contact = (ac.Contacts.Where(c => c.ContactType.Contains("specificString")).Select(c => c.UserContact)).FirstOrDefault();
这使用Contains
method来确定列表中是否包含您要查找的字符串。
如果找到匹配项,则会选择Contact
然后FirstOrDefault
将获取第一条记录或返回null
。
答案 1 :(得分:1)
ac.Contacts
.Where(x => x.ContactType.Contains("string"))
.Select(x => x.UserContact)
这将返回具有“string”作为ContactType的联系人列表。
答案 2 :(得分:1)
如果他们保证不同:
var contact = ac.Contacts.SingleOrDefault(c => c.ContractType.Contains("string"));
if (contact != null)
{
var userContact = contact.UserContact;
}
else
{
// handle not found situation
}