Требуется эквивалент C # для кода C - PullRequest
1 голос
/ 19 марта 2009

Кто-нибудь может сказать мне эквивалент C # для этого кода C?

static const value_string  message_id[] = {

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

Ответы [ 5 ]

5 голосов
/ 19 марта 2009
public Enum MessageID { Foo = 0, Bar = 1, Fubar = 2 };

Тогда вы можете получить "строковую" версию, используя Enum.Format() или ToString().

1 голос
/ 19 марта 2009
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},
   ...
}

, в которой строка является вашим ключом к значению.

1 голос
/ 19 марта 2009
    private static readonly IDictionary<int, string> message_id = new Dictionary<int, string>
        {
            { 0x0000, "Foo" }, 
            { 0x0001, "Bar" }
        };
1 голос
/ 19 марта 2009

Что-то вроде:

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

(где вы определяете соответствующий MessageId конструктор.)

Это самый близкий эквивалент коду C - но вы должны определенно подумать, может ли enum согласно ответу tvanfosson быть более подходящим выбором для проектирования.

0 голосов
/ 19 марта 2009

Точного совпадения не будет. C # не допускает static для const полей в классах. Вы можете использовать readonly, однако.

Если вы используете это в локальной области, тогда вы можете воспользоваться преимуществом анонимного набора текста и сделать это:

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

Мне нравится это решение лучше, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...