2013-03-29 19 views
7

A volte vedo questo in esempi di codice:Dove/che cosa è Error.ArgumentNull()?

throw Error.ArgumentNull("someParameter"); 

C'è un esempio here, sulla linea 89.

Mi piacerebbe utilizzare Error nel mio codice. Dove posso trovarlo?

(Ho cercato di trovare per conto mio, ho provato using gli spazi dei nomi in cima a quel file, e ho cercato di ottenere Visual Studio per individuarlo, finora senza fortuna.)

+2

Io preferisco anche un numero minore di caratteri, usando un metodo di supporto per gestire il comando 'if' * e * il' throw'. Es: 'ArgumentHelper.ThrowIfNull (arg," name ");' (che potrebbe essere un metodo di estensione, ovviamente). –

risposta

7

È una classe di supporto definita dai creatori della biblioteca per semplificare la loro vita.

Error.cs di file:

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

Se siete alla ricerca di una funzionalità simile, dare un'occhiata a Code Contracts (per le edizioni non-Express di Visual Studio). Quindi puoi scrivere qualcosa del tipo:

using System.Diagnostics.Contracts; 

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

    // ... 
} 

... e genererà un'eccezione in fase di esecuzione quando questa condizione non è stata soddisfatta.

0

Questo è un tipo interno personalizzato, non esiste nel BCL.

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

È possibile copiarlo da lì e tu se lo desideri.

5

È una classe di supporto interna, con visibilità internal. Ecco perché non sei stato in grado di individuarlo.

Il codice sorgente Microsoft utilizza questo modello in una varietà di luoghi.

Ma perché farlo? Ti permette di lanciare un'eccezione coerente, ben formattata, localizzata senza dover mettere quella logica in ogni gestore di eccezioni.

Facendo che un passo ulteriore, alcune definizioni contengono anche istruzioni di compilatore, quali:

 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 
     } 

Altri metodi (come PropertyNull()) sono decorate con messaggi di soppressione di analisi del codice.

Ancora una volta, è semplicemente un meccanismo di convenienza/coerenza per evitare di ripetere questo codice dappertutto.

Probabilmente non suggerirei di provare a utilizzare questo codice esatto nel tuo progetto, perché le tue esigenze saranno diverse. Ma puoi certamente usarlo come schema.