【发布时间】:2020-01-14 07:28:15
【问题描述】:
大家好,我有一个问题:如何在 C# 中使用单个表达式返回语句直接执行函数或委托以及从方法返回值
*供参考,我使用的是C#7
在这种情况下,我需要向用户返回一个像这样生成的对象:
object obj = cmd.ExecuteScalar();
我还有一个我想调用的日志记录功能:
DoLog(cmd.CommandText)
PS:我 100% 知道我可以无条件地使用几个 if 语句以更简单的方式实现这一点 - 我只是问是否任何人都可以为我提供最优雅的“单线”方法。
这是条件返回表达式通常如何工作的标准示例
return (someBool)
? value1
: value2;
如果 someBool 为 TRUE,这将返回 'value1';
基本上我的问题是我可以做这样的事情
return (chkStatus)
? (obj & DoLog(cmd.CommandText))
: null;
对于一些建议我可以使用单个管道运算符来拆分返回的人的回应,虽然您的建议是真诚的,但我假设您从未尝试过编译它们
如果你有,你会发现它不能作为类型工作:Object 和 Void 不能直接比较,从而导致编译时错误。
我仍然要求更精致/优雅的方法。
【问题讨论】:
-
呃.....
catch { throw; }???没用? -
@jasttim - 是的,但是如果你所做的只是再次抛出,为什么还要抓住呢? -- 你可以尝试..finally 而不用 catch。
-
如果你不捕捉异常,它就不会被“吃掉”……只捕捉你能解决的异常。
-
你可以完全省略你的
catch { throw; }。它将与只有try finally而没有任何catch完全相同。无论如何,我仍然没有得到您的实际问题。 -
就您的原始问题而言,我想我会选择
if (obj != null) { DoLog(cmd.CommandText); } return obj;简单、清晰、简洁。
标签: c# winforms syntax conditional-statements