2012-07-17 44 views
12

我有这样的代码在我的自定义的MembershipProvider:将字符串比较为null - 为什么Resharper认为这总是错误的?

public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) 
{ 
    if (config == null) 
     throw new ArgumentNullException("config"); 

    if (name == null) 
     name = "MyCustomMembershipProvider"; 
    ... 
} 

ReSharper的,标志着第二if语句,并告诉我,这将总是为false。

resharper message

但是,为什么这总是为false?我可以很容易地将null作为参数传递给方法。

这是一个bug还是resharper在这里?

PS 1:我使用Resharper 6.1
PS 2:我知道使用string.IsNullOrEmpty()将是无论如何要去的地方。我只是好奇。

+1

你的班级从哪个班级派生?它是来自你还是来自.NET框架? – 2012-07-17 19:44:38

+0

是你的完整代码吗?我使用的是ReSharper 6.1,但没有得到这个指示。 – 2012-07-17 19:46:12

+0

我从MembershipProvider派生(在System.Web.Security) – magnattic 2012-07-17 19:47:26

回答

15

可能将参数name标记为[NotNull]。 Resharper提供常见BCL类的合同元数据。

+1

是否有任何理由以这种方式标记此方法参数?这是一个公共方法,什么会阻止任何人用空参数调用它? – magnattic 2012-07-17 19:49:04

+0

合同元数据并不意味着100%准确。它意味着务实。我认为这是件好事。 – usr 2012-07-17 19:49:58

+0

有趣的是,尽管[NotNull]代码合同,ProviderBase也对名称进行了NULL检查。 – 2012-07-17 20:02:16

相关问题