Bra*_*itz 20 .net c# programming-languages
var item = aVal ?? aDefaultVal;
Run Code Online (Sandbox Code Playgroud)
我可能会忽略一些明显的东西,但对于三元运算符来说有类似的东西,而不是做
var item = aclass.amethod() > 5 ? aclass.amethod() : 5;
Run Code Online (Sandbox Code Playgroud)
它不需要amethod()
两次打电话?
Uwe*_*eim 28
var item = Math.Max(5, aclass.amethod());
Run Code Online (Sandbox Code Playgroud)
Can*_*ice 26
怎么样:
var result = aclass.amethod();
var item = result > 5 ? result : 5;
Run Code Online (Sandbox Code Playgroud)
那你只需要打aclass.amethod()
一次电话.
小智 12
C#中没有这样的运算符.
虽然我会选择其中一个答案(Math.Max
对于发布的示例,使用的答案可能更明确),但这只是为了展示另一种方法.令人遗憾的是,计算需要一个显式类型的变量.
Func<int,int> computation = (x) => x > 5 ? x : 5;
var item = computation(aclass.amethod());
Run Code Online (Sandbox Code Playgroud)
并且在线,这在C#中很难看.
var item = ((Func<int,int>)((x) => x > 5 ? x : 5))(aclass.amethod());
Run Code Online (Sandbox Code Playgroud)
当然,以上两点都归结为:
var item = DoComputation(aclass.amethod());
Run Code Online (Sandbox Code Playgroud)
并利用C#不使用pass-by-name的事实:-)
或者,也许是一种扩展方法:
static class Ext {
public static TO Apply<TI,TO> (this TI obj, Func<TI,TO> fn) {
return fn(obj);
}
}
// note C# now lets us get away with no explicit Func<...> type
var item = Ext.Apply(aclass.amethod(), x => x > 5 ? x : 5);
// or as extension method -- imagine computation is as it was in the
// first example, or a compatible method group
var item = aclass.amethod().Apply(computation);
Run Code Online (Sandbox Code Playgroud)
快乐的编码.