【发布时间】:2014-07-03 16:44:07
【问题描述】:
我有一个示例代码,它调用 SingleOrDefault 方法 3 次,如果任何序列有多个匹配元素,则记录异常。
如果我想检查这段代码的哪一部分抛出异常,问题就开始了。
是否可以从此异常中获取一些有用的信息,例如谓词参数或集合类型以进行更详细的跟踪?
像这样 - 序列包含多个匹配元素。集合 IEnumrable|ParamType|参数 {谓词参数 toString()}
public void GetSingleOrDefaultTest(){
try{
var user = Users.SingleOrDefault(e => e.Id == 1);
var profile = UserProfiles.SingleOrDefault(e => e.Id == 1);
var profile2 = UserProfiles.SingleOrDefault(e => e.Id == 2);
} catch(InvalidOperationException ex){
Log(ex);
}
}
【问题讨论】:
-
你一开始就做错了。不要依赖异常处理来控制流。你会不小心发现真正的错误并隐藏它们,以及其他问题。
-
@usr 仅从这个 sn-p 中我并不清楚它是否用于控制流
-
@BenAaronson 如果异常是执行的预期部分(并且可以避免),那么它们将用于控制流。这就是我的定义。
-
@usr 是的,我只是不确定这种情况是否如此。为什么具有相同 ID 的多个用户会成为预期的执行部分?这看起来像标准的“检查我的数据没有以某种方式进入奇怪的意外状态”代码