使用switch语句的Class属性值
本文关键字:属性 Class switch 语句 使用 | 更新日期: 2023-09-27 18:11:52
我正在使用生成的protobuf代码(参见http://code.google.com/p/protobuf/)
我有一个生成的类看起来像这样:
public class Fruits{
private int _ID_BANANA = (int)1;
private int _ID_APPLE = (int)2;
public int ID_BANANA
{
get { return _ID_BANANA; }
set { _ID_BANANA = value; }
}
public int ID_APPLE
{
get { return _ID_APPLE; }
set { _ID_APPLE = value; }
}
}
然后它们是常量值,但我不能在我的代码中使用它们。例如,我想做一个这样的映射器:
public static Color GetColor(int idFruit) {
switch (idFruit)
{
case new Fruits().ID_BANANA:
return Color.Yellow;
case new Fruits().ID_APPLE:
return Color.Green;
default:
return Color.White;
}
}
我有错误:期望一个常数值。
我想创建一个enum,但似乎是错误的方式,尝试如下:
public const int AppleId = new Fruits().ID_APPLE;
不工作…有人有主意吗?
为什么不在这里使用if else if
语句?
var fruits = new Fruits();
if (idFruit == fruits._ID_BANANA)
return Color.Yellow;
else if (idFruit == fruits._ID_APPLE)
return Color.Green;
else
return Color.White;
或词典:
this.fruitsColorMap = new Dictionary<int, Color>
{
{ fruits._ID_BANANA, Color },
{ fruits._ID_APPLE, Green }
};
然后:
public static Color GetColor(int idFruit) {
if (this.fruitsColorMap.ContainsKey(idFruit) {
return this.fruitsColorMap[idFruit];
}
return Color.White;
}
switch语句中的case值必须是常量——这是switch语句定义的一部分:
switch (expression)
{
case constant-expression:
statement
jump-statement
[default:
statement
jump-statement]
}
根据Microsoft的switch (c#)文档。
你会注意到constant-expression
位。这意味着它可以在编译时确定。因此,这里不允许调用函数(以及对属性property的引用实际上是伪装的函数调用)。