我有一堂课,描述了各种手机的存储。有时Importance
属性可以为null。这是课程
public class PhoneTypeListInfo
{
public string AccountNum { get; set; }
public int PhoneType { get; set; }
public string PhoneNum { get; set; }
public int Importance { get; set; }
}
我定义了一个函数,如果电话号码和帐号与给定的一组值匹配,它将返回一个
PhoneTypeListInfo
。 protected PhoneTypeListInfo RetrievePhoneType(string info, string acctNumber)
{
PhoneTypeListInfo type = xPhoneTypeList.Where(p => p.PhoneNum == info && p.AccountNum == acctNumber).FirstOrDefault();
return type;
}
这一切都很好。我遇到的问题是下面的linq查询。
List<AlertBasedPhones> xAccountPhones = new List<AlertBasedPhones>();
xAccountPhones = (from x in xAccountStuff
where x.Media == "Phone"
let p = RetrievePhoneType(x.Info, acct.AccountNumber)
let xyz = x.Importance = (p.Importance as int?).HasValue ? p.Importance : 0
orderby p.Importance descending
select x).ToList();
我在上面所做的是尝试使用具有不同组成的其他类,除了从PhoneTypeListInfo获取'Importance'属性。
我的问题最终是,要允许
p.Importance
为空,我该怎么做,如果为空,则将其设置为0,同时使x.Importance
为0。 最佳答案
不是p.Importannce
为空,而是p
本身。那是您需要首先检查null的东西。如果使用的是C#6,则可以使用?.
运算符。您也可以将(p.Importance as int?).HasValue ? p.Importance : 0
的逻辑简化为p.Importance ?? 0
。两者结合
List<AlertBasedPhones> xAccountPhones = new List<AlertBasedPhones>();
xAccountPhones = (from x in xAccountStuff
where x.Media == "Phone"
let p = RetrievePhoneType(x.Info, acct.AccountNumber)
let xyz = x.Importance = p?.Importance ?? 0
orderby p?.Importance descending
select x).ToList();