This works:
class Item
{
public decimal Number { get; set; }
public override string ToString() => Number.ToString();
}
then later:
var item = new Item() { Number = 12m };
Console.WriteLine($"Item: {item}");
prints
Item: 12
But what I really want to do instead is:
Console.WriteLine($"Item: {item:C2}");
And somehow get
Item: $12.00
Anyone know if/how this could be done?
Thanks!
CodePudding user response:
You can implement IFormattable
(docs):
class Item : IFormattable
{
public decimal Number { get; set; }
public override string ToString() => Number.ToString();
// IFormattable's .ToString method:
public string ToString(string format, IFormatProvider formatProvider) => Number.ToString(format, formatProvider);
}
Now this code will work:
Console.WriteLine($"Item: {item:C2}");
In this case it should work perfectly since you're basically proxying the same method on decimal
, but if you're going to do anything more complicated, you should probably read the docs linked above, especially the Notes to Implementers section.