
[英]Is There a Concise Way To Achieve Conditional Pluralization of TimeSpan Format?
[英]Concise way of using conditional operator
我有以下代码,其中LongMethodWithResult
是需要很长时间才能运行的方法:
object o = LongMethodWithResult() == someVal ? LongMethodWithResult() : someOtherResult;
现在, LongMethodWithResult
方法被评估了两次,不是吗?
我知道我可以编写一个使用变量存储long方法结果的方法,如下所示:
public static object ConciseConditionalOperator(object a, object b, object c)
{
return a == b ? a : c;
}
但是我将对是否有最佳的方法或者C#或.NET提供的某些功能感兴趣。
任何想法都欢迎!
在这种情况下,您可以使用:
object o = LongMethodWithResult() == someVal ? someVal : someOtherResult;
如果您希望使用其他表示法,或者要避免两次指定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;
}
用法:
var o = LongMethodWithResult().IfEqualThenElse(someVal, someOtherResult);
通常你是对的。 在您的示例中, LongMethodWithResult
被执行两次。 为了避免这种情况,您需要首先存储LongMethodWithResult
的结果:
var result = LongMethodWithResult();
object o = result == someVal ? result : someOtherResult;
正如Peter B在回答中所说的那样,您提供的示例是一个特殊情况,不需要它,因为当LongMethodWithResult()
的结果等于您已经知道的值时,就无需再次调用它。 您可以只返回您已经知道的值。
但是,通常需要执行以下操作:
var result = LongMethodWithResult();
object o = result == null ? defaultResult : result;
但是,您可以使用以下简单的方法替换最后一个结构:
object o = LongMethodWithResult() ?? defaultResult;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.