视觉工作室(或Resharper?)如何知道“表达总是如此”?

时间:2014-06-26 07:06:41

标签: c# visual-studio-2012 ado.net resharper

将Visual Studio 2012与Resharper一起使用。

示例代码:

    public void DoSomethingWithTable(DataTable dt)
    {
        if (dt.PrimaryKey != null) // XX
        {
            // do something
        }
    }

在IDE中,我收到警告:“表达始终为真”,标记为XX。我的问题是,IDE(或Resharper?)如何知道PrimaryKey的DataColumn []值不为空?

我知道如果我使用像Reflector这样的工具来查看ADO.NET的内部工作原理,我可以得出相同的结论,但Resharper是如何做到的?这样的警告是否100%可靠?

1 个答案:

答案 0 :(得分:4)

我没有反射器,也许它使用反编译器?

它确实永远不会是null,这是通过ILSpy反编译的:

public DataColumn[] PrimaryKey
{
    get
    {
        UniqueConstraint uniqueConstraint = this.primaryKey;
        if (uniqueConstraint != null)
        {
            return uniqueConstraint.Key.ToArray();
        }
        return DataTable.zeroColumns;
    }
        // setter ...

// System.Data.DataTable
internal static readonly DataColumn[] zeroColumns = new DataColumn[0];

修改:如duplicate resharper所示,对于.NET或NUnit Framework中的类使用NotNullAttribute

  

我们已经分析了很多.NET Framework类库   以及NUnit Framework,并通过外部XML文件进行注释,   使用JetBrains.Annotations中的一组自定义属性   命名空间....