今天我浏览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);
}
为什么有人决定这样做?有什么好处吗?
答案 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
?第二种在某些情况下很有用。