Ams*_*nna 0 c# enums operators ternary-operator
只是出于好奇,问这个
就像下面的表达一样
a = (condition) ? x : y; // two outputs
Run Code Online (Sandbox Code Playgroud)
为什么我们不能为枚举操作?
说,
myValue = f ??? fnApple() : fnMango() : fnOrange(); // no. of outputs specified in the enum definition
Run Code Online (Sandbox Code Playgroud)
而不是switch语句(即使可以进行重构)
enum Fruit
{
apple,
mango,
orange
};
Fruit f = Fruit.apple;
Run Code Online (Sandbox Code Playgroud)
或者它是某种无用的运营商?
Jon*_*eet 17
我不能说我曾经想过这样一个算子 - 依靠枚举值的排序会非常脆弱.您可以轻松使用开关:
switch (f)
{
case Fruit.Apple: myValue = fnApple(); break;
case Fruit.Mango: myValue = fnMango(); break;
case Fruit.Orange: myValue = fnOrange(); break;
default: throw new ArgumentOutOfRangeException("f");
}
Run Code Online (Sandbox Code Playgroud)
或者,创建一个地图:
static readonly Dictionary<Fruit, Func<Foo>> FruitFunctions =
new Dictionary<Fruit, Func<Foo>> {
{ Fruit.Apple, fnApple },
{ Fruit.Mango, fnMango },
{ Fruit.Orange, fnOrange }
};
...
myValue = FruitFunctions[f]();
Run Code Online (Sandbox Code Playgroud)
我已经在各种情况下使用了这两种技术,而且我更害怕它们与建议的运算符相比.