什麼你問,絕對可以通過應用ReSharper Annotations來解決!這些屬性爲ReSharper的分析提供了額外的提示,允許您將ReSharper「善良」添加到您自己的方法和類中。我最近在JetBrains上錄製了一個名爲ReSharper Secrets的網絡研討會,我在那裏談論並展示註釋,歡迎您觀看!
至於你的問題,有3個註釋屬性,你可以應用到解決您的問題(並添加更多很酷的功能)。
假設爲IfNull
的定義是這樣的:
public static class Throw
{
public static void IfNull<T>(T parameter, string parameterName) where T : class
{
if (parameter == null)
throw ArgumentNullException(string.Format("Parameter {0} is null", parameterName));
}
}
3 ReSharper的屬性你可以裝飾它,ContractAnnotation
,NotNull
和InvokerParameterName
這樣的:
[ContractAnnotation("parameter: null => halt")]
public static void IfNull<T>([NotNull] T parameter,
[InvokerParameterName] string parameterName)
where T : class
{
...
}
下面是這些屬性做:
第一,[ContractAnnotation]
,告訴ReSharper的,如果parameter
是試探性null,則此方法將暫停程序執行,即拋出異常(在運行時)。這是防止「可能的NullReferenceException」警告的原因。用於定義合同註釋的語言解釋爲here。
二是[NotNull]
,告訴ReSharper的是parameter
不能是啓發式空。這給出了「可能的空分配給標有[NotNull]屬性的實體」警告。
第三個是[InvokerParameterName]
告訴ReSharper,parameterName
參數是來自調用(調用)方法的參數之一的名稱,因此它將提供代碼完成,其中列出了所有調用方法參數。如果名稱不是參數,例如,局部變量名稱,這將在ReSharper中發出警告。
下面是這些動作屬性的簡短視頻(適用於另一組API,但想法完全相同):http://screencast.com/t/NhGVaUr7GO3b