除了基类数据(如堆栈跟踪)之外,NullReferenceException背后的设计决策是什么,不包含任何运行时特定的信息?是否有Visual Studio的扩展,可以直接告诉你表达式的哪一部分为空?
我是否应该捕获日志记录的异常?
public foo(..)
{
try
{
...
} catch (Exception ex) {
Logger.Error(ex);
throw;
}
}
如果我在每个层(DataAccess,Business和WebService)中都有这个,这意味着会多次记录异常.
如果我的图层在单独的项目中并且只有公共接口中有try/catch,那么这样做是否有意义?为什么?为什么不?我可以使用不同的方法吗?
" 对象引用未设置为对象的实例 "
为什么异常不会显示对象引用字段的名称,或者至少显示其类型?
这可能是.NET中最常见的运行时错误之一.尽管System.Exception具有堆栈跟踪,但没有其他有用的详细信息.
在一年的过程中,我花了几个小时筛选堆栈跟踪(通常在我没写的代码中),希望有一个来自".pdb"文件的行号,然后在代码中查找行,即使这样,它也是通常不明显该线上的哪个引用为null.拥有参考字段的名称将非常方便.
如果System.ArgumentNullException实例可以显示方法参数的名称(" Value不能为null.参数名称:value "),那么System.NullReferenceException实例肯定可以包含null字段的名称(或其包含的集合).
有没有办法找出是什么特定对象导致了NullReferenceException?我已经阅读了关于故障排除NullReferenceException的页面,它谈到了在调试器中检查变量并查看异常消息。
如果异常是在生产代码中引发的,因此您无法运行调试器来检查变量怎么办?异常消息显示了堆栈跟踪,因此您可以查看抛出异常的方法,但它没有说明是哪个特定对象null。
我希望能够将对象的名称添加null到错误消息中,这样当我查看用户的报告并遇到 . 时NullReferenceException,我可以轻松查看对象是什么null并修复它。有谁知道这样做的方法吗?
我也发现这个问题提出了同样的问题,但它是从 2011 年开始的,我不知道从那时起是否有任何变化。
编辑:这个问题,这是标记为重复的确是重复的,但也是很老的(2008)。从那以后有什么改变吗?
编辑 2:我在谷歌搜索这个问题时发现了这一点。Visual Studio 可以告诉你是什么抛出了NullReferenceException; 有什么方法可以利用它将其添加到日志文件中吗?