C# Resharper对空字符串发出警告(System.NullReferenceException)
我只是想确定我没有写太久的代码。。。但是,这似乎极不可能: 我创建了var,检查null,如果是,则返回,因此我无法将其视为null:) 再竖琴虫 编辑:C# Resharper对空字符串发出警告(System.NullReferenceException),c#,string,nullreferenceexception,resharper-8.0,C#,String,Nullreferenceexception,Resharper 8.0,我只是想确定我没有写太久的代码。。。但是,这似乎极不可能: 我创建了var,检查null,如果是,则返回,因此我无法将其视为null:) 再竖琴虫 编辑: 根据Igal Tabachnik的回答,他是对的,我使用以下方法: public static bool IsNullOrEmpty(this string target) { return String.IsNullOrEmpty(target); } 我发现它更容易阅读 if (some_string.IsNullOrEmpt
根据Igal Tabachnik的回答,他是对的,我使用以下方法:
public static bool IsNullOrEmpty(this string target)
{
return String.IsNullOrEmpty(target);
}
我发现它更容易阅读
if (some_string.IsNullOrEmpty())
// do something here
而不是:
if (string.IsNullOrEmpty(some_string))
// do something here
解决方案:伊格尔·塔巴奇尼克是对的。丢失的仅有两件是:
您的代码建议您使用的
IsNullOrEmpty()
方法是您自己的自定义扩展方法。“real”IsNullOrEmpty
是string
的静态方法
简短回答:如果你把它改成
if (string.IsNullOrEmpty(input_string))
return "...";
ReSharper将停止抱怨
详细回答:因为这是您自己的扩展方法,所以ReSharper无法知道此方法的结果如何应用于您的代码。为此,ReSharper使用代码注释来找出有关代码的附加信息。一个这样的注释称为a,ReSharper使用它来计算原始string.IsNullOrEmpty()
方法的结果。你可以在博客文章中了解更多
总之,如果您想使用自己的扩展方法,但让ReSharper正确理解它,则必须对其应用以下契约注释:
[ContractAnnotation("null=>true")]
public static bool IsNullOrEmpty(this string input)
{
...
}
您的IsNullOrEmpty()
-方法似乎是您自己的发明,因为原始方法是System.String
的静态方法,而不是扩展方法。ReSharper无法找出该值,但如果使用原始值,它会发现没有任何null
-值可以使其通过
var str = value as string;
if (string.IsNullOrEmpty(str))
return;
var unicorn = str.Contains("unicorn");
这不是一个错误。另外:确保在字符串处使用大写的“S”。IsNullOrEmpty@Matthijs为什么?两者都是完全有效的,并编译到
System.String
@dav_i:我发誓我刚才看到IsNullOrEmpty不适用于小写字符串。对不起,我错了+1在保持原有扩展方法的同时解决问题。还有豪猪树;)哇,真是个好办法+1当然。这非常有趣:)。你的第一个建议是100%的钱,使用'string.IsNullOrEmpty(my_string)'get's摆脱它。用我的代码更新了问题。但是,扩展方法上的注释并不会使警告消失。我会去看你发布的链接:)不管怎样答案都不错。经过编辑的答案,看起来你是对的,但额外的步骤是在resharper中设置选项。荣誉