2013-03-29 27 views
7

Bazen kod örneklerinde görüyoruz:Error.ArgumentNull() nerede?

throw Error.ArgumentNull("someParameter"); 

hattı 89., örnek here var ben kendi kodunda Error kullanmak istiyorum. Nereden bulabilirim?

(şimdiye kadar hiç şans ben o dosyanın üst kısmında using ad alanlarını çalıştı, kendi başıma bulmaya çalıştı ve Visual Studio bulmak için almaya çalıştı.)

+2

"if" * ve "throw" işlemek için yardımcı bir yöntem kullanarak daha az boilerplate'i tercih ederim. Örnek: 'ArgumentHelper.ThrowIfNull (arg, "isim"); '(tabii bir uzantısı yöntem olabilir ki). –

cevap

7

Kütüphane yaratıcıları tarafından hayatlarını kolaylaştırmak için tanımlanan bir yardımcı sınıftır.

Error.cs dosyası:

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

benzer işlevsellik için arıyorsanız, (Visual Studio olmayan Express sürümleri için) Code Contracts bakabilirsiniz. O zaman böyle bir şey yazabilirsiniz:

using System.Diagnostics.Contracts; 

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

    // ... 
} 

... ve bu koşul yerine edilmemiştir zaman çalışma zamanında bir özel durum oluşturur.

0

bir olduğunu That özel iç tip, BCL'de mevcut değil.

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

İsterseniz buradan kopyalayabilirsiniz.

5

internal görünürlük ile dahili bir yardımcı sınıftır. Bu yüzden onu bulamadınız.

Microsoft kaynak kodu bu deseni çeşitli yerlerde kullanır.

Ama neden yapıyorsun? Eğer her durum işleyici o mantık koymak zorunda kalmadan tutarlı, güzel biçimli, lokalize istisna sağlar.

bir adım daha bazı tanımlar da örneğin derleyici yönergeleri, içeren alınması: (örneğin PropertyNull() olarak)

 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 
     } 

diğer yöntemler kod analiz bastırma mesajları ile süslenmiştir. Bu kod, her yerde tekrarlanmayı önlemek için bir kolaylık/tutarlılık mekanizmasıdır.

Muhtemelen bu kesin kodu kendi projenizde kullanmaya çalışmanızı öneriyorum çünkü ihtiyaçlarınız farklı olacaktır. Ama kesinlikle bir desen olarak kullanabilirsiniz.