将异常转换为更通用的有什么好处?

时间:2016-04-08 22:35:23

标签: c# exception casting

今天我浏览Error中的System.Linq课程。这里有很多例外(最常见的是这些例外)。例如:

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 个答案:

答案 0 :(得分: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?第二种在某些情况下很有用。