ReSharper的告訴我,MemberInfo.DeclaringType不能爲空: 奇怪ReSharper的警告上MemberInfo.DeclaringType
但是在運行該代碼時,文本「頂級成員」被打印出來。我不明白,這裏有什麼問題?
ReSharper的告訴我,MemberInfo.DeclaringType不能爲空: 奇怪ReSharper的警告上MemberInfo.DeclaringType
但是在運行該代碼時,文本「頂級成員」被打印出來。我不明白,這裏有什麼問題?
Resharper在這裏根本就是錯誤的。 MemberInfo
是abstract
類型,它是可能的任意實施返回任何它爲所欲爲包括null
例子:
class EvilMemberInfo : MemberInfo
{
public override System.Type DeclaringType
{
get { return null; }
}
// Rest omitted for brevity
}
微軟代碼契約規定,這是從來沒有空。
// System.Reflection.MemberInfo
public virtual Type DeclaringType
{
get
{
Contract.Ensures(Contract.Result<Type>() != null, null, "Contract.Result<Type>() != null");
Type result;
return result;
}
}
因此,ReSharper依賴代碼合同。
好的,我已經將它發佈在代碼合同論壇上,http://social.msdn.microsoft.com/Forums/en-US/codecontracts/thread/fdf1436a-e843-408c -b932-c012e03e72cd – JBSnorro 2011-04-22 10:37:43
你做了一個完整的清理和重建?經常resharper提出奇怪的警告,因爲它最近沒有重新運行它的分析。否則,它可能只是一個錯誤。 – captncraig 2011-04-21 17:07:25
@CMP,jep我做到了。我覺得這很奇怪,因爲諸如NotNullAttribute這樣的屬性會自動分配給標準庫。如果該代碼中存在錯誤,那麼以前必須注意到該錯誤。 – JBSnorro 2011-04-21 17:09:23
我是指resharper的靜態分析引擎中的一個bug。 – captncraig 2011-04-21 17:13:15