簡體   English   中英

在C#中初始化復雜的結構/對象

[英]Initializing complex struct/object in C#

我正在開發一個項目,該項目在通信中使用大量消息,在以前的項目中,我使用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#結構體的初始化與初始化對象一樣混亂/復雜,而且它們都不容易維護所有消息,參數等的列表。

有人可以幫我從這里出去嗎? 結構是走的路還是還有其他更好的方法?

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

您確實應該為此使用class ,而不是struct 此類型違反了何時使用struct大多數規則。

至於初始化-如果使用List<T> ,則可以使用集合初始化程序來簡化創建和使用。 您可以在啟動時解析文件以創建對象,而不是對代碼中的初始化進行硬編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM