visual studio(或Resharper ?)如何知道“表达式永远是正确的”?

本文关键字:表达式 永远 何知道 studio Resharper visual | 更新日期: 2023-09-27 18:10:16

使用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%可靠吗?

visual studio(或Resharper ?)如何知道“表达式永远是正确的”?

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

它确实不可能是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];

Edit:如所示,duplicate resharper使用。net或NUnit框架中的类的NotNullAttribute

我们已经分析了。net框架类库的很大一部分,如以及NUnit框架,并通过外部XML文件对其进行注释,使用一组来自JetBrains的自定义属性。注释名称空间…