gpt4 book ai didi

c# - try...catch 中的隐式类型变量

转载 作者:太空狗 更新时间:2023-10-29 21:09:38 25 4
gpt4 key购买 nike

我喜欢对几乎所有内容使用隐式类型,因为它简洁明了。但是,当我需要将 try...catch block 包裹在单个语句周围时,我必须打破隐式类型以确保变量具有已定义的值。这是一个人为的假设示例:

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());

请修改它以记录异常或将捕获限制为具体类型。我不赞成吞下所有异常(exception)。

由于这个答案被大量阅读,我想指出这个实现只是演示质量。在生产代码中,您可能应该合并评论中给出的建议。为自己编写一个功能强大、设计良好的辅助函数,它将为您服务多年。

关于c# - try...catch 中的隐式类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14073134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com