【发布时间】:2019-06-08 07:35:22
【问题描述】:
有没有办法在表达式中声明临时变量以重用中间结果?
动机是当您需要在逻辑或转换中多次使用计算结果时,仍然能够使用流畅的调用链和表达式主体方法,例如
public static string Foo(IBar bar)
{
var result = bar.LongCalculation();
return result.HasError
? throw new Exception()
: result.ToString();
}
我认为我可以使用 let/select linq 查询关键字,但如果没有 from 子句,这似乎是不可能的,例如
public static string Foo(IBar bar) =>
let result = bar.LongCalculation()
select result.HasError
? new Exception()
: result.ToString();
【问题讨论】:
-
为什么不调用像
LongCalculationSafe这样的表达式主体方法中的方法?然后你可以在那里使用你需要的任何代码。 -
为什么要使用表达式体法?当正文是单行时,它只是可以使用的语法糖。如果您需要多行,只需使用常规方法语法即可。
-
我更喜欢函数式流动风格——这是 c# 的方向,并且有兴趣知道它是否有解决方案——因为在逻辑/转换需要重用一个临时的。
-
LINQ 在这里毫无意义。 LINQ 实际上是一个“更好的 foreach”,因为它适用于 collection 并迭代它们。但这不是这里的情况,您正在使用一个单一的
result对象。 LINQ 只处理集合迭代,所以即使你入侵它(例如,通过将你的单个对象放在一个列表中),它也没有任何意义。
标签: c# expression