gpt4 book ai didi

c# - Resharper:可能对标有 "NotNull"属性的实体进行空分配

转载 作者:太空宇宙 更新时间:2023-11-03 19:53:33 25 4
gpt4 key购买 nike

如果这个问题有点令人着迷,我深表歉意,但我确实希望我的代码在 resharper 告诉我的地方没有任何曲折的线条。

我有一个通用列表:

var permissions = new List<Permission>();

在代码中的某个时刻,我需要测试第一个元素:

if (permissions.First().ImportID == this.ImportId)
{
// do stuff
}

Resharper(正确地)提示权限可能为空,所以我接受了它的建议并添加了一个 checkin :

if (permissions != null && permissions.First().ImportID == this.ImportId)
{
// do stuff
}

现在我意识到我需要防止列表为空,所以我也添加了对其中任何一个的检查:

if (permissions != null && permissions.Any() && permissions.First().ImportID == this.ImportId)
{
// do stuff
}

生活很美好,代码可以正常工作,resharper 很安静。意识到 null + any() 检查将被经常使用,我添加了一个扩展方法:

public static bool IsEmpty<T>(this IEnumerable<T> source)
{
if (source == null)
return true;
return !source.Any();
}

现在唯一的问题是当我使用它时:

if (!permissions.IsEmpty() && permissions.First().ImportID == this.ImportId)

Resharper 再次开始提示“可能对标有“NotNull”属性的实体进行空赋值”。

那么,有没有办法让 resharper 知道在 IsEmpty() 执行后权限永远不会为空(以同样的方式理解 != null 的作用)或者是我忽略消息的唯一选择。

最佳答案

我怀疑你可以使用 R# annotation为了这。像这样的东西:

[ContractAnnotation("null => true")]
public static bool IsEmpty<T>(this IEnumerable<T> source)
{
return source == null || !source.Any();
}

我相信应该给 R# 足够的信息来确定如果 IsEmpty 返回 false,您不会尝试使用 null 引用>.

关于c# - Resharper:可能对标有 "NotNull"属性的实体进行空分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36007287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com