使用生成的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;
}
}
我有错误:预计会有一个常量值。
我想创建一个枚举,但似乎是错误的方式,尝试类似的东西:
public const int AppleId = new Fruits().ID_APPLE;
不工作...... 有人有想法吗?
答案 0 :(得分:1)
为什么不在这里使用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;
}
答案 1 :(得分:0)
switch语句中的case值必须是常量 - 这是switch语句定义的一部分:
switch (expression)
{
case constant-expression:
statement
jump-statement
[default:
statement
jump-statement]
}
根据Microsoft的switch (C#)文档。
你会注意到constant-expression
位。这意味着它可以在编译时确定。因此,这里不允许调用函数(以及对属性属性的引用实际上是伪装的函数调用)。