将不同的字符串添加到同一列表中的对象的正确方法是什么?

时间:2019-04-04 08:48:18

标签: c# .net

以下示例并未代表实际的课程和问题,但由于各种原因对其进行了修改。

我有一个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)创建一些枚举并将其用于对象创建

2 个答案:

答案 0 :(得分:3)

首先,我建议您重写TestClass.ToString()方法,这样就不必构建描述循环中当前对象的字符串。

请参见https://docs.microsoft.com/dotnet/api/system.object.tostring?view=netframework-4.7.2

然后第二种解决方案可能还可以,尽管我们需要更多有关您的真正目标或类内容的详细信息。

答案 1 :(得分: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 :
               ...
    }
}

通过这种方式,您可以依赖类的自己的实现,而不用在客户端代码中创建自己的实现。