【发布时间】:2016-03-15 09:30:57
【问题描述】:
如果这个问题有点令人着迷,我深表歉意,但我确实希望我的代码在 resharper 告诉我的地方不要有任何摇摆不定的线条。
我有一个通用列表:
var permissions = new List<Permission>();
在代码中的某个点我需要测试第一个元素:
if (permissions.First().ImportID == this.ImportId)
{
// do stuff
}
Resharper(正确地)抱怨权限可能为空,所以我接受它的建议并添加一个签入:
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 所做的一样),或者是我忽略该消息的唯一选择。
【问题讨论】:
标签: c# attributes refactoring resharper