需要C代码的C#等价物

时间:2009-03-19 16:07:50

标签: c# arrays initialization

有人可以告诉我这个C代码的C#等价物吗?

static const value_string  message_id[] = {

  {0x0000, "Foo"},
  {0x0001, "Bar"},
  {0x0002, "Fubar"},
  ...
  ...
  ...
}

5 个答案:

答案 0 :(得分:5)

public Enum MessageID { Foo = 0, Bar = 1, Fubar = 2 };

然后,您可以使用Enum.Format()ToString()获取“字符串”版本。

答案 1 :(得分:1)

类似的东西:

MessageId[] messageIds = new MessageId[] {
    new MessageId(0x0000, "Foo"),
    new MessageId(0x0001, "Bar"),
    new MessageId(0x0002, "Fubar"),
    ...
};

(您定义适当的MessageId构造函数的地方。)

这是与C代码最接近的等价物 - 但你应该考虑根据tvanfosson的答案枚举是否可能是更合适的设计选择。

答案 2 :(得分:1)

    private static readonly IDictionary<int, string> message_id = new Dictionary<int, string>
        {
            { 0x0000, "Foo" }, 
            { 0x0001, "Bar" }
        };

答案 3 :(得分:1)

private const value_string message_id[] = {

  new value_string() { prop1 = 0x0000, prop2 = "Foo"},
  new value_string() { prop1 = 0x0001, prop2 = "Bar"},
  new value_string() { prop1 = 0x0002, prop2 = "Fubar"},
  ...
  ...
  ...
}

或更好,如果你像字典一样使用它:

private const Dictionary<string, int> message_id = {

   {"Foo", 0},
   {"Bar", 1},
   {"Fubar", 2},
   ...
}

其中字符串是您输入值的关键。

答案 4 :(得分:0)

不会有完全匹配。 C#不允许static个字段中的const字段。不过,您可以使用readonly

如果您在本地范围内使用此功能,那么您可以获得匿名输入的好处并执行此操作:

var identifierList = new[] {
    new MessageIdentifier(0x0000, "Foo"),
    new MessageIdentifier(0x0001, "Bar"),
    new MessageIdentifier(0x0002, "Fubar"),
    ...
};

我更喜欢this solution