下面代码中的第25行如何生成后面的错误?我很困惑。 ProductSuggestions为IEnumerable<Product> ProductSuggestions
Line 24: <%if (Model.ProductSuggestions != null) { %>
Line 25: <%if (Model.ProductSuggestions.Any()) {
对象引用未设置为对象的实例。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。
答案 0 :(得分:2)
你是否肯定问题是第25行,而不是第24行?尝试制作第24行
<%if (Model != null && Model.ProductSuggestions != null) { %>
看看你是否得到了同样的错误。我的猜测是你不会。
答案 1 :(得分:0)
NullReferenceException可以引用ProductSuggestions对象的成员吗?
我刚刚遇到一个问题,我检查了一个父对象为null,但是当我尝试访问任何子属性时,我收到了NullReferenceException。
答案 2 :(得分:0)
我道歉,但根据我提供的信息,这个问题并不容易解决。
在睡觉之后,我突然意识到即使我在列表中输入IEnumerable
它仍然是IQueryable
,因为它是我的存储库中的LINQ查询的结果。延迟执行IQueryable
后,在我在视图中的设置上调用.Count()
或.Any()
之前,问题并未显现。
这个问题确实位于Repository中,我的LINQ查询设置没有考虑可能的NULL。
所以,答案应该是:你这个白痴,你确定你正在处理IEnumerable
而不是IQueryable
吗?如果这真的是IQueryable
,你确定问题不在LINQ查询本身,而不是在它被执行的地方吗? :)
答案 3 :(得分:0)
评估查询(IEnumerable或IQueryable)是潜在的异常来源,即使查询本身不为空。
Customer c = null;
List<Customer> customers = new List<Customer>() {c};
IEnumerable<Customer> query = customers.Where(x => x.Name == "Bob");
if (query != null)
{
Console.WriteLine("query is not null");
}
try
{
bool result = query.Any();
}
catch
{
Console.WriteLine("null exception when query was evaluated");
}