下面的示例并不代表实际的类和问题,它由于各种原因而被改编。
我有一个用包含byte KeyID, int Length, byte[] Value的对象填充的List<EnginePart>。每个对象都是按顺序创建的,并具有自己的含义。该列表表示“要更换的部件”,我们希望以一种良好的格式将其输出给销售人员,这样他就可以将其告知客户。每个部件都有自己的id,比如说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)遍历列表并拥有一堆if和WriteLines
2)在创建时向对象添加一个字符串,但在这种情况下,我们仍然有if语句
3)创建一些枚举,并在创建对象时使用它
发布于 2019-04-04 17:17:39
通常,当你想要一个“人类可读的字符串表示”时,你应该重写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 :
...
}
}这样你就可以依赖于类自己的实现,而不是在客户端代码中创建自己的实现。
https://stackoverflow.com/questions/55511628
复制相似问题