我喜欢对几乎所有事情使用隐式类型,因为它干净而简单。但是,当我需要在单个语句周围包装 try...catch 块时,我必须打破隐式类型以确保变量具有定义的值。这是一个人为的假设示例:
var s = "abc";
// I want to avoid explicit typing here
IQueryable<ABC> result = null;
try {
result = GetData();
} catch (Exception ex) { }
if (result != null)
return result.Single().MyProperty;
else
return 0;
有什么办法可以打电话吗GetData()
具有异常处理,但无需显式定义结果变量的类型?就像是GetData().NullOnException()
?
这是一个常见问题。我建议您坚持使用现有的解决方案。
如果你真的想要一个替代方案,这里是:
static T NullOnException<T>(Func<T> producer) where T : class {
try { return producer(); } catch { return null; } //please modify the catch!
}
//now call it
var result = NullOnException(() => GetData());
请修改此设置以记录异常或将捕获限制为具体类型。我不赞成吞并所有例外。
由于这个答案被大量阅读,我想指出这个实现只是演示质量。在生产代码中你可能应该纳入评论中给出的建议。为自己编写一个强大的、设计良好的辅助函数,它将为您服务多年。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)