使用条件运算符的简明方法

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提供的某些功能感兴趣.

欢迎任何想法!

Pet*_*r B 5

在这种特定情况下,您可以使用:

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)