假设我有一个类"Item",它有三个成员变量:string name,decimal quantity和string unit.我有三个公共获取/设置属性.
有时,我想将数量显示为文本以及正确的单位,例如.10米或100英尺.
我的问题是,是否可以为属性设置某种ToString()函数,以便可以自定义其文本输出?
谢谢,
SAURABH.
Fre*_*örk 15
你可以做的是创建一个返回格式化版本的新(readonly)属性:
public string QuantityAsString
{
get
{
return string.Format("{0} {1}", this.Quantity, this.Unit);
}
}
Run Code Online (Sandbox Code Playgroud)
听起来你的对象模型没有被正确考虑.您可能想要做的是抽象Unit
并Quantity
进入另一个对象,然后您可以覆盖ToString
它.这样做的好处是可以将相关值保持在一起,并允许您实现诸如将来单位之间的转换(例如从最高到英尺等的转换)之类的事情,例如
public struct Measure
{
public Measure(string unit, decimal quantity)
{
this.Unit = unit;
this.Quantity = quantity;
}
public string Unit { get; private set; }
public decimal Quantity { get; private set; }
public override string ToString()
{
return string.Format("{0} {1}", this.Quantity, this.Unit);
}
}
public class Item
{
public string Name { get; set; }
public Measure Measure { get; set; }
public override string ToString()
{
return string.Format("{0}: {1}", this.Name, this.Measure);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我在Measure
这里制作了一个结构,因为它可能具有值语义.如果你采用这种方法,你应该使它成为不可变的,并重写Equals/GetHashCode,因为它适用于结构.