0

我正在使用生成的 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; }
    }
}

然后它们是常量值,但我不能在我的代码中使用 then 。例如我想做一个这样的映射器:

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;

也不工作......有人有想法吗?

4

2 回答 2

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;
}
于 2013-05-02T09:38:50.593 回答
0

switch 语句中的 case 值必须是常量——这是 switch 语句定义的一部分:

switch (expression)
{
   case constant-expression:
      statement
      jump-statement
   [default:
       statement
       jump-statement]
 }

根据 Microsoft 的switch (C#)文档。

你会注意到这constant-expression一点。这意味着它可以在编译时确定。所以这里不允许调用函数(并且对属性属性的引用实际上是变相的函数调用)。

于 2013-05-02T10:01:43.537 回答