当在String.Format中使用不是框架类型的 .NET 类型时,是否可以在某处/以某种方式为该类型定义自定义格式字符串?
考虑以下LINQPad程序:
void Main()
{
var t = new Test(DateTime.Now);
string.Format("{0}", t).Dump();
string.Format("{0:dd}", t).Dump();
}
public class Test
{
private readonly DateTime _DateTime;
public Test(DateTime dateTime)
{
_DateTime = dateTime;
}
public override string ToString()
{
return _DateTime.ToString();
}
public string ToString(string format)
{
return _DateTime.ToString(format);
}
public string ToString(string format, IFormatProvider provider)
{
return _DateTime.ToString(format, provider);
}
}
我希望第二次调用string.Format
将值格式化为该内部日期的天数,但它仍显示完整的日期和时间,因此程序的输出是在测试时:
30.08.2013 13:53:55
30.08.2013 13:53:55
相反,我想要这样:
30.08.2013 13:53:55
30
显然string.Format
不只是使用反射来找到我的.ToString
. 有我可以实现的接口吗?我必须实现一些其他类型并将其注册到某个地方才能做到这一点吗?
这甚至有可能实现吗?