2016-04-08 14 views
0

今日私はSystem.LinqErrorクラスを渡ってカムします。ここには多くの例外があります(最も基本的な例外にキャストされています)。たとえば:より一般的な例外をキャストするメリットは何ですか?

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

それは、ここでの例で使用されます。

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

なぜいくつかのいずれかがそれを行うことにしたのでしょうか?何か利点はありますか?

+1

これは、OOPをよく理解していないC#プログラマーをより良く感じました。それだけです。彼がもう尋ねることがないということは非常にまれなことではありません。プロジェクトの災害時に投げられる肉ではないことに注意してください。 –

答えて

3

誰もそれを行いません。私は最終的なバイナリから逆コンパイルされたコードを取得するためにリフレクタを使用していると仮定します。リフレクタは責任があります。

あなたは.NETリファレンスソースコードを見れば、それはこれをしない:コードの

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

他の同様の部分には、(それが基本ライブラリで一般的なパターンです)も明示的なキャストを省略します。完全のために

いいえ、キャストを行うにはポイントがありません。明示的なキャストを主張して追加すると、コンパイラはそれをとにかく削除します。私は考えることができる唯一の特殊なケースは、あなたが、匿名型またはvarを扱っている場合である例えば:

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

最初のケースはまだ愚かである - なぜないException exの代わりvarを使うのか?第2は特定の場合に有用です。

関連する問題