在C#中初始化复杂的struct / object

时间:2013-11-07 19:01:53

标签: c# c#-4.0 struct

我正在开发一个项目,该项目使用大量的消息进行通信,在之前使用C I的项目中使用这些消息作为嵌套的结构数组

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 */

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#结构的初始化与初始化对象一样混乱/复杂,并且不会使所有消息,参数的易于维护的列表成为可能等等。

任何人都可以帮助我吗? 结构是要走的路还是还有其他更好的东西?

2 个答案:

答案 0 :(得分:1)

您的示例的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 } } }
};

答案 1 :(得分:0)

你真的应该使用class,而不是struct。此类型违反了适用struct时的大部分规则。

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