Was Sie fragen, kann definitiv gelöst werden, indem Sie ReSharper Annotations anwenden! Dies sind Attribute, die zusätzliche Hinweise für die Analyse von ReSharper bieten, so dass Sie ReSharper "Güte" zu Ihren eigenen Methoden und Klassen hinzufügen können. Ich habe kürzlich ein Webinar mit JetBrains mit dem Namen ReSharper Secrets aufgenommen, in dem ich über Anmerkungen spreche und diese demonstriere.
Was Ihre Frage betrifft, gibt es 3 Annotationsattribute, die Sie anwenden können, um Ihre Probleme zu lösen (und weitere coole Funktionen hinzuzufügen).
die Definition für IfNull
Gesetzt ist so etwas wie:
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));
}
}
Sie dekorieren mit 3 ReSharper Attribute, ContractAnnotation
, NotNull
und InvokerParameterName
wie folgt aus:
[ContractAnnotation("parameter: null => halt")]
public static void IfNull<T>([NotNull] T parameter,
[InvokerParameterName] string parameterName)
where T : class
{
...
}
Hier ist, was diese Attribute tun :
Die erste, [ContractAnnotation]
, sagt ReSharper, dass wenn parameter
ist heuristisch null, dann stoppt diese Methode die Programmausführung, d. H. Gibt Ausnahme (zur Laufzeit) aus. Dies verhindert die Warnung "mögliche NullReferenceException". Die für die Definition von Vertragskommentaren verwendete Sprache wird erklärt here.
Die zweite ist [NotNull]
, sagt ReSharper, dass parameter
nicht heuristisch Null sein muss. Dies ergibt die "Mögliche Nullzuweisung für die Entity, die mit der [NotNull] -Attribut" - Warnung markiert ist.
Die dritte, [InvokerParameterName]
sagt ReSharper dass das parameterName
Argument den Namen einer der Parameter von dem anrufenden ist (Aufruf) Verfahren, so wird es Code-Vervollständigung bereitzustellen, die alle Rufmethode Parameter auflistet. Dies gibt eine Warnung in ReSharper, wenn der Name kein Parameter ist, z. B. ein lokaler Variablenname.
Hier ist ein kurzes Video dieser Attribute in Aktion (auf einem anderen Satz von APIs angewandt, aber die Idee ist genau das gleiche): http://screencast.com/t/NhGVaUr7GO3b