Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Resharper:可能为标记为“0”的实体赋值为空;NotNull";属性_C#_Attributes_Refactoring_Resharper - Fatal编程技术网

C# Resharper:可能为标记为“0”的实体赋值为空;NotNull";属性

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

如果这个问题有点困扰我,我很抱歉,但我确实希望我的代码下面不要有任何扭曲的线条,因为resharper在责骂我

我有一个通用列表:

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();
}