任何人都可以解释以下声明如何生成
System.InvalidOperationException:值null不会被赋予System.Boolean类型的成员,因为它是一个值类型,其值不能为null(从瑞典语(see also)自由翻译)。
if (user.Friends.Count() == 0)
用户是用户,朋友是IEnumerable<User>
。
更新:好友从linq返回到sql调用,实际上是WhereSelectEnumerableIterator
。在这种情况下它是空的,所以我曾期望上面评估为真。如果朋友不是空的,这种方法很好。因此,出于某种原因,当它出现空洞的情况下降时,很高兴知道原因,但我想我真正想问的是,解决方法是什么?
答案 0 :(得分:8)
user.Friends
是一个惰性评估的枚举(yield return
或Linq查询),评估中的内容是抛出异常。没有更多的代码,就不可能确切地说出来。
答案 1 :(得分:3)
拆分代码行,看看报告的错误:
int temp = user.Friends.Count();
if (temp == 0)
如果问题仍然不清楚,请分开第一行。
答案 2 :(得分:2)
正如我在对280Z28的评论中所写,吸气剂看起来像这样。
public IEnumerable<User> Friends
{
get
{
var friends = from u2g in FriendUserGroup.User2GroupLinks
select u2g.User;
return friends;
}
}
FriendUserGroup.User2GroupLinks是一个EntitySet。它的Count属性抛出异常。任何()也会,如果有人想知道。你需要做的是检查HasLoadedOrAssignedValues。所以我插入了
if (!FriendUserGroup.User2GroupLinks.HasLoadedOrAssignedValues)
return null;
在上面的吸气器中。
当别人付出努力时,我讨厌回答我自己的问题。感谢所有的投入!
答案 3 :(得分:0)
朋友IEnumerable似乎尚未初始化。例如,下面的代码段不会产生运行时错误,因为在Main()中,我将Friends设置为通用列表。
public sealed class Program
{
public static void Main()
{
var user = new User
{
Friends = new List<Int32>()
};
if (user.Friends.Count() == 0)
{
// TODO: Input logic here
}
}
}
/// <summary>
/// User class
/// </summary>
public class User
{
/// <summary>
/// Gets or sets the friends.
/// </summary>
/// <value>The friends.</value>
public IEnumerable<Int32> Friends
{
get; set;
}
}
答案 4 :(得分:-2)
如果是列表,那么Count()
似乎是错误的,那就是属性Count
?你能证实一下吗?