使用Lambda查询时,我们如何避免空异常?在下面的代码中InstallationDateType
为null时,我得到一个异常。我该如何解决这个问题?
foreach (AvailableDate availableDate in installationDatesResponseRootObject.Response
.InstallationDatesResponse
.AvailableDates
.Where(a =>
a.InstallationDateType.ToString().ToUpper() == Constants.InstallationDateTypeDish))
{
//Do Something
}
答案 0 :(得分:3)
尝试使用C#6中引入的Null条件运算符?.
。
在你的例子中,它将是
a.InstallationDateType?.ToString().ToUpper().Equals(Constants.InstallationDateTypeDish)
答案 1 :(得分:3)
检查installationDatesResponseRootObject,Response,InstallationDatesResponse,AvailableDates是否为空。 然后将LINQ更改为:
installationDatesResponseRootObject.Response.InstallationDatesResponse.AvailableDates.Where(a => a.InstallationDateType!=null && a.InstallationDateType.ToString().ToUpper() == Constants.InstallationDateTypeDish))
答案 2 :(得分:2)
详细说明我的评论,这是一个例子:
var items = installationDatesResponseRootObject.Response.InstallationDatesResponse.AvailableDates
.Where(a => a.InstallationDateType?.ToString().ToUpper() == Constants.InstallationDateTypeDish);
if (items.Any())
foreach (var item in items)
{
//Do something
}
请注意,这只是一个例子。有更好的方法可以检查IEnumerable是否为空。
答案 3 :(得分:1)
问题是因为您在.ToString()
引用上被称为null
,因此您需要先检查此内容。
有几种不同的检查方法。如果您正在使用最新的C#,那么您可能最好使用slanto提到的C#6中引入的Null条件运算符?.
。
如果您使用的是旧版C#,那么您可以使用下面的Where
方法进行操作。
foreach (AvailableDate availableDate in installationDatesResponseRootObject.Response.InstallationDatesResponse.AvailableDates.Where(a => a.InstallationDateType != null && a.InstallationDateType.ToString().ToUpper() == Constants.InstallationDateTypeDish))
{
//Do Something
}
希望有所帮助。