有一个奇怪的问题。多年来发生了几次,但我从来没有弄清楚为什么。总是通过重新安排我现有的代码来解决它,但是想知道是否有更合适的处理方式,或者至少弄清楚它背后的内容。
非工作版本:
public bool CaptureFrame(ArrayCache cache)
{
if (cache == null)
throw new ArgumentNullException("cache");
DataArray frame = cache.CacheData;
if (frame == null)
throw new ArgumentNullException("cache.CacheData");
// do stuff
}
工作版:
public bool CaptureFrame(ArrayCache cache)
{
if (cache == null)
throw new ArgumentNullException("cache");
if (cache.CacheData == null)
throw new ArgumentNullException("cache.CacheData");
DataArray frame = cache.CacheData;
// do stuff
}
问题是:frame 不 null(至少根据调试器,以及我可以跟踪代码的任何措施),但是当它执行if (frame == null)
检查时,它出来是真的并抛出异常。我重写了检查cache.CacheData并且它工作正常,但它确实不应该对代码逻辑产生任何影响。
我设法在网站上找到一个类似问题的另一个问题,最终与==和!=运算符重载有关。这些运算符在我的代码中没有为有问题的类重载,而且它是一个独立的类,所以它没有任何东西可以继承。
编辑:John Saunders请求CacheData属性的代码:
private DataArray cacheData;
public DataArray CacheData
{
get
{
return cacheData;
}
set
{
cacheData = value;
}
}
答案 0 :(得分:0)
看起来你正在映射非工作的异常,然后调用 DataArray frame = cache.CacheData; 但是如果cache.CacheData如果为null然后你将它分配给DataFrame,那么我认为在分配或假设你的第二个看起来很好之前首先检查null是最好的..或许你可以抛出异常捕获异常并为两种情况尝试一些测试用例