2016-04-08 25 views
0

Bugün System.Linq numaralı telefondan Error sınıfında dolaşıyorum. Burada birçok istisna vardır (en temel olana dökülür). Örneğin:Bir istisnayı daha genel olana dönüştürmenin yararları nelerdir?

internal static Exception ArgumentNull(string paramName) 
{ 
    return (Exception) new ArgumentNullException(paramName); 
} 

Burada örneğin kullanılır:

public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source) 
{ 
    if (source == null) 
    throw Error.ArgumentNull("source"); 
    return new List<TSource>(source); 
} 

Neden birileri onu yapmaya karar veriyor? Herhangi bir fayda var mı?

+1

OOP'un daha iyi olduğunu anlamayan bir C# programlayıcısı yaptı. Hepsi bu. Artık etrafta olmadığı için çok nadiren tesadüf. Bir proje felaketine atılan et olmamak için dikkatli olun. –

cevap

3

Bunu kimse yapmaz. Son ikili dosyalardan decompiled bir kod almak için bir reflektör kullandığınızı farz ediyorum - reflektör suçludur.

.NET referans kaynak koduna baktığımızda, bu yapmaz: kodunun

public static Exception ArgumentNull(string argument) 
{ 
    return new ArgumentNullException(argument); 
} 

Diğer benzer parçaları (o baz kütüphanelerde yaygın bir desen var) ayrıca açık döküm ihmal. Bütünlüğü için

:

Hayır, döküm yapmanın hiçbir anlamı yoktur. Açık yayınlamada ısrar edip eklerseniz, derleyici yine de onu kaldıracaktır. Aklıma gelen tek özel durum, anonim tipler veya var ile uğraşıyoruz olduğunu ör .:

var ex = (Exception) new ArgumentNullException(...); 
var someType = new { ex = (Exception)new ArgumentNullException(...) }; 

ilk dava halen saçma - neden olmasın Exception ex yerine var kullanabilir? İkincisi, bazı durumlarda faydalıdır.