0

我正在开发一个项目,该项目在其通信中使用大量消息,在以前使用 C 的项目中,我将这些消息作为嵌套的结构数组处理

struct message
{
    int value1;
    int value2;
    params[] parameters;
}

struct params
{
    int value3;
    int value4;
}

message messageList[2] = 
{
    { 1, 2, { 1, 1 }},
    { 3, 4, { 2, 2 }},
    null    
}
/* not perfect but you get the idea */

我正在尝试在 C# 中做同样的事情,但到目前为止,我动不动就遇到问题。

最终目标:

  • 一个包含所有消息定义的大文件,这些必须是:
    • 有条理/可读(审查定义的人应该了解发生了什么)
    • 紧凑(100 条消息不应占用 10,000 LOC)
    • 灵活(数组长度)
  • 消息定义被解析为具有嵌套对象的对象数组
    • 解析/初始化不需要非常快,只在 PC 上启动时发生
  • 奖励对象的结果列表是不可变的。(忘了说这个第一轮)

我认为做到这一点的最佳方法类似于使用结构的 C,但 C# 结构的初始化与初始化对象一样混乱/复杂,而且两者都不能轻松维护所有消息、参数等的列表。

有谁可以帮我离开这里吗?结构是要走的路还是有其他更好的方法?

4

2 回答 2

2

您的示例的 C# 等效项如下:

public class Params
{
    public int value3;
    public int value4;
}

public class Message
{
    public int value1;
    public int value2;
    public Params[] parameters;
}

Message[] messageList =
{
    new Message { value1 = 1, value2 = 2, parameters = new[] { new Params { value3 = 1, value4 = 1 } } },
    new Message { value1 = 3, value2 = 4, parameters = new[] { new Params { value3 = 2, value4 = 2 } } }
};
于 2013-11-07T19:22:16.503 回答
0

您真的应该class为此使用 a ,而不是struct. 这种类型违反了大多数关于何时struct合适的规则。

至于初始化 - 如果您使用List<T>,您可以使用集合初始化程序来简化创建和使用。您可以解析文件以在启动时创建对象,而不是在代码中对初始化进行硬编码。

于 2013-11-07T19:05:28.437 回答