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%可靠吗?
我没有反射器,也许它使用反编译器?
它确实不可能是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的自定义属性。注释名称空间…