При использовании типа .NET, который не является типом фрейма в String.Format, можно ли определить строки пользовательского формата для этого типа где-нибудь/каким-то образом?Создайте строки пользовательского формата для нового типа .NET для использования в String.Format?
Рассмотрим следующую 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
. Есть ли интерфейс, который я могу реализовать? Должен ли я реализовать какой-либо другой тип и зарегистрировать его где-нибудь, чтобы сделать это?
Можно ли это достичь?
Извините, если я не понял ваш вопрос, но это не то, что вы можете покрыть с IFormatProvider? См. Здесь: http://msdn.microsoft.com/en-us/library/0asazeez(v=vs.90).aspx –
Что вы подразумеваете под этим? IFormatProvider обычно является объектом, специфичным для культуры, т.е. 'CultureInfo.InvariantCulture', я не думаю, что объект ничего не знает о моем новом типе. Или я здесь что-то не понимаю? –