将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%可靠?
答案 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中的一组自定义属性 命名空间....