以下示例并未代表实际的课程和问题,但由于各种原因对其进行了修改。
我有一个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)创建一些枚举并将其用于对象创建
答案 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 :
...
}
}
通过这种方式,您可以依赖类的自己的实现,而不用在客户端代码中创建自己的实现。