2013-03-29 5 views
7

Manchmal sehe ich dies in Code-Beispiele:Wo/was ist Error.ArgumentNull()?

throw Error.ArgumentNull("someParameter"); 

Es ist ein Beispiel here auf der Leitung 89.

Ich mag würde Error in meinem eigenen Code verwenden. Wo kann ich es finden?

(ich versuchte es auf eigene Faust zu finden, die ich using die Namensräume an der Spitze der Datei versucht, und ich versuchte, Visual Studio zu finden, um es zu bekommen, bisher kein Glück.)

+2

Ich bevorzuge noch weniger Bosterplate, mit einer Hilfsmethode, um das 'if' * und * das' throw' zu behandeln. Beispiel: 'ArgumentHelper.ThrowIfNull (arg," name ");' (was natürlich eine Erweiterungsmethode sein könnte.) –

Antwort

7

Es ist eine Hilfsklasse, die von den Erschaffern der Bibliothek definiert wird, um ihnen das Leben zu erleichtern.

Error.cs Datei:

internal static ArgumentNullException ArgumentNull(string parameterName, string messageFormat, params object[] messageArgs) 
{ 
    return new ArgumentNullException(parameterName, Error.Format(messageFormat, messageArgs)); 
} 

Wenn Sie nach einer ähnlichen Funktionalität suchen, werfen Sie einen Blick auf Code Contracts (für Nicht-Express-Editionen von Visual Studio). Dann können Sie etwas wie folgt schreiben:

using System.Diagnostics.Contracts; 

void MyMethod(string someParameter) 
{ 
    Contract.Requires<ArgumentNullException>(someParameter != null); 

    // ... 
} 

... und es wird eine Ausnahme zur Laufzeit auslösen, wenn diese Bedingung nicht erfüllt ist.

0

dass a benutzerdefinierter interner Typ, existiert in der BCL nicht.

namespace System.Web.Http 
{ 
    /// <summary> 
    /// Utility class for creating and unwrapping <see cref="Exception"/> instances. 
    /// </summary> 
    internal static class Error 
    {} 
} 

Sie können es von dort kopieren und Sie es, wenn Sie möchten.

5

Es ist eine interne Hilfsklasse mit internal Sichtbarkeit. Deshalb haben Sie es nicht gefunden.

Microsoft-Quellcode verwendet dieses Muster an einer Vielzahl von Orten.

Warum aber? Es ermöglicht Ihnen, eine konsistente, schön formatierte, lokalisierte Ausnahme auszugeben, ohne diese Logik in jeden Ausnahmebehandler einfügen zu müssen.

Taking, dass ein Schritt weiter, einige Definitionen auch Compiler-Direktiven, wie enthalten:

 internal static ArgumentException InvalidEnumArgument(string parameterName, int invalidValue, Type enumClass) { 
#if NETFX_CORE 
      return new ArgumentException(Error.Format(CommonWebApiResources.InvalidEnumArgument, parameterName, invalidValue, enumClass.Name), parameterName); 
#else 
      return new InvalidEnumArgumentException(parameterName, invalidValue, enumClass); 
#endif 
     } 

Andere Methoden (wie PropertyNull()) mit Codeanalyse Unterdrückung Nachrichten eingerichtet.

Auch hier handelt es sich einfach um einen Convenience/Consistency-Mechanismus, um zu vermeiden, dass dieser Code überall wiederholt wird.

Ich würde wahrscheinlich nicht vorschlagen, diesen genauen Code in Ihrem eigenen Projekt zu verwenden, weil Ihre Bedürfnisse anders sein werden. Aber Sie können es sicherlich als Muster verwenden.