flo*_*ien 0 c# conditional-operator
我有这个代码,这LongMethodWithResult是一个需要很长时间才能运行的方法:
object o = LongMethodWithResult() == someVal ? LongMethodWithResult() : someOtherResult;
Run Code Online (Sandbox Code Playgroud)
现在这个LongMethodWithResult方法被评估了两次,不是吗?
我知道我可以编写一个方法,使用变量来存储long方法的结果,如下所示:
public static object ConciseConditionalOperator(object a, object b, object c)
{
return a == b ? a : c;
}
Run Code Online (Sandbox Code Playgroud)
但我会对是否有最好的方法,或者C#或.NET提供的某些功能感兴趣.
欢迎任何想法!
在这种特定情况下,您可以使用:
object o = LongMethodWithResult() == someVal ? someVal : someOtherResult;
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢不同的表示法,或者如果您想避免指定someVal两次,那么您可以创建一个Extension方法(在静态类中):
public static T IfEqualThenElse<T>(this T valueToCheck, T value1, T value2)
where T : System.IEquatable<T>
{
return valueToCheck.Equals(value1) ? value1 : value2;
}
Run Code Online (Sandbox Code Playgroud)
用法:
var o = LongMethodWithResult().IfEqualThenElse(someVal, someOtherResult);
Run Code Online (Sandbox Code Playgroud)