簡體   English   中英

將不同的字符串添加到同一列表中的對象的正確方法是什么?

[英]What is the proper way to add different strings to objects in same list?

以下示例不代表實際的類別和問題,由於各種原因已對其進行了修改。

我有一個List<EnginePart>填充了包含byte KeyID, int Length, byte[] Value 每個對象都是按順序創建的,具有自己的含義。 該列表代表“要更換的零件”,我們希望以一種很好的格式將其輸出給銷售人員,以便他可以將其告知客戶。 每個零件都有自己的編號,例如0x20-氣缸,0x40-機油濾清器。

現在,我想以一種不錯的方式向每個對象添加/顯示一個人類可讀的字符串,而無需遍歷foreach和檢查

if(enginePart.key =="0x20") Console.WriteLine("Cylinder rotation count is " + enginePart.value)

if(enginePart.key =="0x40") Console.WriteLine("Oil filter only filters " + enginePart.value + " of oil)

還有其他更好的方法嗎? 不可能為每個引擎零件創建新的類。

到目前為止,我已經提出了3種可能的解決方案。

1)遍歷列表,並有一堆ifs和WriteLines

2)在創建對象時添加一個字符串,但是在這種情況下,我們仍然具有if語句

3)創建一些枚舉並將其用於對象創建

首先,我建議您重寫TestClass.ToString()方法,這樣就不必構建描述循環中當前對象的字符串。

請參閱https://docs.microsoft.com/dotnet/api/system.object.tostring?view=netframework-4.7.2

然后,也許第二種解決方案就可以了,盡管我們需要更多有關您的目標是什么或類的內容的詳細信息。

通常,當您使用“人類可讀的字符串表示形式”時,應該覆蓋ToString

class EnginePart
{
    byte KeyID { get; set; }
    int Length { get; set; }
    byte[] Value { get; set; }

    public override string ToString()
    {
        return KeyId == "0x40" ? "Oil filter only filters " + value :
               KeyId == "0x20" ? "Cylinder rotation count is " + value :
               ...
    }
}

這樣,您可以依靠類自己的實現,而不用用客戶端代碼創建自己的實現。

暫無
暫無

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

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