2013-03-29 11 views
7

Czasem widzę to w próbkach kodu:Gdzie/co jest Error.ArgumentNull()?

throw Error.ArgumentNull("someParameter"); 

Jest przykładem here, na linii 89.

Chciałbym użyć Error we własnym kodzie. Gdzie mogę to znaleźć?

(próbowałem go znaleźć na własną rękę, próbowałem using obszary nazw w górnej części tego pliku, a ja starałem się dostać Visual Studio, aby go zlokalizować, jak dotąd bez powodzenia.)

+2

Ja preferuję jeszcze mniejszą skalę, używając metody pomocniczej do obsługi 'if' * i *' rzutu'. Ex: 'ArgumentHelper.ThrowIfNull (arg," name ");' (co oczywiście może być metodą rozszerzenia). –

Odpowiedz

7

Jest to klasa pomocnicza zdefiniowana przez twórców biblioteki, aby ułatwić im życie.

Error.cs file:

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

Jeśli szukasz podobnej funkcjonalności, przyjrzeć Code Contracts (dla non-Express wersji programu Visual Studio). Następnie możesz napisać coś takiego:

using System.Diagnostics.Contracts; 

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

    // ... 
} 

... i spowoduje wyjątek w czasie wykonywania, gdy ten warunek nie zostanie spełniony.

0

To niestandardowy typ wewnętrzny, nie istnieje w BCL.

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

Możesz go skopiować i tam, jeśli chcesz.

5

Jest to wewnętrzna klasa pomocnicza o widoczności internal. Dlatego nie udało ci się go zlokalizować.

Kod źródłowy firmy Microsoft używa tego wzorca w różnych miejscach.

Ale dlaczego to robisz? Umożliwia on rzutowanie spójnego, dobrze sformatowanego, zlokalizowanego wyjątku bez konieczności umieszczania tej logiki w każdej procedurze obsługi wyjątku.

Biorąc to krok dalej, niektóre definicje nawet zawierać wskazówki kompilatora, takie jak:

 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 
     } 

innych metod (takich jak PropertyNull()) urządzone są w wiadomościach kół analizy kodu.

Ponownie, jest to po prostu mechanizm wygody/spójności, aby uniknąć powtarzania tego kodu w każdym miejscu.

Prawdopodobnie nie sugerowałbym próby użycia tego dokładnego kodu we własnym projekcie, ponieważ twoje potrzeby będą różne. Ale na pewno możesz go użyć jako wzorca.

Powiązane problemy