C# 检查表在考虑空值时是相等的

C# 检查表在考虑空值时是相等的,c#,list,null,equals,C#,List,Null,Equals,如何检查两个列表是否相等,同时更好地解释空值?至少您可以将集合比较提取到单独的方法中: public bool Equals(Permissions that) { if (Groups == null && that.Groups != null || Groups != null && that.Groups == null) return false; if (Users == null && that.Users != nu

如何检查两个列表是否相等,同时更好地解释空值?

至少您可以将集合比较提取到单独的方法中:

public bool Equals(Permissions that)
{
    if (Groups == null && that.Groups != null || Groups != null && that.Groups == null) return false;
    if (Users == null && that.Users != null || Users != null && that.Users == null) return false;

    if (Groups != null && Users != null)
        return Groups.SequenceEqual(that.Groups) && Users.SequenceEqual(that.Users);

    return Groups != null ? Groups.SequenceEqual(that.Groups) : Users.SequenceEqual(that.Users);
}
public static bool BothNullOrEquals(IEnumerable left,IEnumerable right)
{
if(left==null&&right==null)
{
返回true;
}
if(左!=null和右!=null)
{
返回左。SequenceEqual(右);
}
返回false;
}
公共bool等于(该权限)
{
返回BothNullOrEquals(Groups,that.Groups)和&BothNullOrEquals(Users,that.Users);
}

至少您可以将集合比较提取到单独的方法中:

public bool Equals(Permissions that)
{
    if (Groups == null && that.Groups != null || Groups != null && that.Groups == null) return false;
    if (Users == null && that.Users != null || Users != null && that.Users == null) return false;

    if (Groups != null && Users != null)
        return Groups.SequenceEqual(that.Groups) && Users.SequenceEqual(that.Users);

    return Groups != null ? Groups.SequenceEqual(that.Groups) : Users.SequenceEqual(that.Users);
}
public static bool BothNullOrEquals(IEnumerable left,IEnumerable right)
{
if(left==null&&right==null)
{
返回true;
}
if(左!=null和右!=null)
{
返回左。SequenceEqual(右);
}
返回false;
}
公共bool等于(该权限)
{
返回BothNullOrEquals(Groups,that.Groups)和&BothNullOrEquals(Users,that.Users);
}

使用elvis运算符:
foo?.bar==baz?.qux
@Dai这对可枚举项(如此处)有帮助吗?@mjwills它简化了长度相等检查,这是一种优化。@Dai向我们展示了如何做到这一点。因为,如果它是
IEnumerable
,则没有长度(没有枚举-在这种情况下,您最好执行
SequenceEqual
)说到@mjwills,我应该澄清一下:如果
用户和
用户都是
null
,它将抛出一个异常。使用elvis操作符:
foo?.bar==baz?.qux
@Dai这将有助于枚举(如这里所示)?@mjwills它简化了长度相等检查,这是一种优化。@Dai向我们展示了如何做到这一点。因为,如果它是
IEnumerable
,那么就没有长度(没有枚举-在这种情况下,您最好使用
SequenceEqual
)。@mjwills我应该澄清一下:如果
用户和
用户都是
null
,那么它将抛出一个异常。