Lob*_*nts 1 c# resharper refactoring attributes
如果这个问题有点痴迷,我很抱歉,但我确实喜欢我的代码,不要在resharper告诉我的地方下面留下任何扭曲的线条.
我有一个通用列表:
var permissions = new List<Permission>();
Run Code Online (Sandbox Code Playgroud)
在代码中的某些点我需要测试第一个元素:
if (permissions.First().ImportID == this.ImportId)
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
Resharper(正确地)抱怨权限可能为null,因此我接受其建议并添加一个签入:
if (permissions != null && permissions.First().ImportID == this.ImportId)
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
现在我意识到我需要防止列表为空,所以我也在那里添加一个支票:
if (permissions != null && permissions.Any() && permissions.First().ImportID == this.ImportId)
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
生活是美好的,代码工作和resharper是安静的.意识到我将经常使用null + any()检查,我添加了一个扩展方法:
public static bool IsEmpty<T>(this IEnumerable<T> source)
{
if (source == null)
return true;
return !source.Any();
}
Run Code Online (Sandbox Code Playgroud)
现在唯一的问题就是我使用它:
if (!permissions.IsEmpty() && permissions.First().ImportID == this.ImportId)
Run Code Online (Sandbox Code Playgroud)
Resharper再次开始呻吟"可能对指定为"NotNull"属性的实体赋值.
那么,有没有办法让resharper知道在执行IsEmpty()之后权限永远不会为空(以同样的方式理解!= null)或者是忽略该消息的唯一选择.
我怀疑你可以使用R#注释.就像是:
[ContractAnnotation("null => true")]
public static bool IsEmpty<T>(this IEnumerable<T> source)
{
return source == null || !source.Any();
}
Run Code Online (Sandbox Code Playgroud)
我相信应该给R#足够的信息,以确定如果IsEmpty
返回你不会尝试使用空引用false
.