C# Resharper:可能为标记为“0”的实体赋值为空;NotNull";属性
如果这个问题有点困扰我,我很抱歉,但我确实希望我的代码下面不要有任何扭曲的线条,因为resharper在责骂我 我有一个通用列表:C# Resharper:可能为标记为“0”的实体赋值为空;NotNull";属性,c#,attributes,refactoring,resharper,C#,Attributes,Refactoring,Resharper,如果这个问题有点困扰我,我很抱歉,但我确实希望我的代码下面不要有任何扭曲的线条,因为resharper在责骂我 我有一个通用列表: var permissions = new List<Permission>(); Resharper(正确地)抱怨权限可能为空,因此我接受了它的建议并添加了一个签入: if (permissions != null && permissions.First().ImportID == this.ImportId) { // do
var permissions = new List<Permission>();
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();
}
Resharper再次开始抱怨“可能为标记为“NotNull”属性的实体分配空值”
那么,有没有办法让resharper知道,在IsEmpty()执行后,权限永远不会为null(就像它理解!=null所做的一样),或者是我唯一可以忽略消息的选项。我怀疑您可以使用一个。比如:
[ContractAnnotation("null => true")]
public static bool IsEmpty<T>(this IEnumerable<T> source)
{
return source == null || !source.Any();
}
[ContractAnnotation(“null=>true”)]
公共静态布尔值为空(此IEnumerable源)
{
返回source==null | |!source.Any();
}
我相信这应该会给R#足够的信息,以确定如果IsEmpty
返回false
,您没有试图使用空引用。我怀疑您可以使用a来实现这一点。比如:
[ContractAnnotation("null => true")]
public static bool IsEmpty<T>(this IEnumerable<T> source)
{
return source == null || !source.Any();
}
[ContractAnnotation(“null=>true”)]
公共静态布尔值为空(此IEnumerable源)
{
返回source==null | |!source.Any();
}
我相信这会给R#足够的信息,以确定如果
IsEmpty
返回false
谢谢Jon,你的怀疑是完全正确的。在我的代码下不再有摇摆的线条&我很高兴。谢谢Hanks Jon你的怀疑完全正确。在我的代码下不再有摇摆的线条&我很高兴。谢谢
[ContractAnnotation("null => true")]
public static bool IsEmpty<T>(this IEnumerable<T> source)
{
return source == null || !source.Any();
}