Quelqu'un peut-il me dire l'équivalent C# pour ce code C?C# équivalent pour le code C nécessaire
static const value_string message_id[] = {
{0x0000, "Foo"},
{0x0001, "Bar"},
{0x0002, "Fubar"},
...
...
...
}
Quelqu'un peut-il me dire l'équivalent C# pour ce code C?C# équivalent pour le code C nécessaire
static const value_string message_id[] = {
{0x0000, "Foo"},
{0x0001, "Bar"},
{0x0002, "Fubar"},
...
...
...
}
private static readonly IDictionary<int, string> message_id = new Dictionary<int, string>
{
{ 0x0000, "Foo" },
{ 0x0001, "Bar" }
};
public Enum MessageID { Foo = 0, Bar = 1, Fubar = 2 };
Ensuite, vous pouvez obtenir la version "chaîne" en utilisant Enum.Format()
ou ToString()
.
D'oh ... pensais-je dans la mauvaise direction. Est-ce que je me sens stupide maintenant ... – RobIII
En fait, j'aime mieux la solution de Bdukes, mais c'est parce que j'ai besoin des données dans un dictionnaire de toute façon. – RobIII
Pas de problème. Cela ressemblait à quelque chose que j'utiliserais enum - en l'absence de tout autre contexte. Vous pouvez également envisager de le charger à partir d'un fichier de configuration plutôt que de le définir dans du code. De cette façon, vous n'aurez pas à recompiler votre application pour ajouter un autre identifiant de message. – tvanfosson
Quelque chose comme: (. Si vous définissez un constructeur MessageId
approprié)
MessageId[] messageIds = new MessageId[] {
new MessageId(0x0000, "Foo"),
new MessageId(0x0001, "Bar"),
new MessageId(0x0002, "Fubar"),
...
};
C'est le plus proche équivalent au code C - mais vous devriez certainement examiner si un ENUM selon la réponse de tvanfosson pourrait être un choix de conception plus approprié.
Il n'y aura pas de correspondance exacte. C# n'autorise pas static
sur les champs const
dans les classes. Vous pouvez utiliser readonly
, cependant.
Si vous utilisez cette portée locale, vous pouvez obtenir l'avantage de taper anonyme et faire:
var identifierList = new[] {
new MessageIdentifier(0x0000, "Foo"),
new MessageIdentifier(0x0001, "Bar"),
new MessageIdentifier(0x0002, "Fubar"),
...
};
J'aime this solution mieux, cependant.
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"},
...
...
...
}
ou mieux encore, si vous utilisez comme un dictionnaire:
private const Dictionary<string, int> message_id = {
{"Foo", 0},
{"Bar", 1},
{"Fubar", 2},
...
}
dans lequel la chaîne est la clé de la valeur.
C'est encore mieux! – RobIII