Почему у объекта нет перегрузки, которая принимает IFormatProvider?

При преобразовании, например, десятичного в строку , вы используете CultureInfo.InvariantCulture и передайте его как IFormatProvider .Но почему этой перегрузки нет в объекте ?

Хорошей реализацией будет:

public virtual string ToString()
{
   // yadayada, usual ToString
}

public virtual string ToString(IFormatProvider provider)
{
   return ToString();
}

Это не принесет вреда или пользы классу объекта , но объектам, производным от него может вместо этого переопределить перегрузку, и ее будет намного проще вызвать, если вы не уверены в типе.

Проблема, которая заставила меня столкнуться с этим, заключалась в том, что я создавал метод, который бы получал все свойства класса и записывал их в xml. Поскольку я не хотел проверять тип объекта, я просто вызвал ToString . Но если бы это было десятичное число, вывод был бы основан на CurrentCulture потока, что не является оптимальным. Единственный обходной путь, который я вижу, - это изменение CurrentCulture на InvariantCulture , а затем изменение его обратно на то, что было раньше. Но это было бы просто уродливо, так как мне пришлось бы писать блоки try finally и т. Д.

Мой текущий код:

        foreach (var property in typeof(Order).GetProperties(BindingFlags.Public | BindingFlags.Instance).
            Where(c => ValidTypes.Contains(c.PropertyType)))
        {
            var value = property.GetValue(order, null);
            if (value != null)
            {
                writer.WriteElementString(property.Name, 
                value.ToString());
            }
        }

Но я бы хотел, чтобы он был:

        foreach (var property in typeof(Order).GetProperties(BindingFlags.Public | BindingFlags.Instance).
            Where(c => ValidTypes.Contains(c.PropertyType)))
        {
            var value = property.GetValue(order, null);
            if (value != null)
            {
                writer.WriteElementString(property.Name, 
                value.ToString(CultureInfo.InvariantCulture));
            }
        }

Любая выгода от отсутствия этой перегрузки на объект ?

28
задан Oskar Kjellin 22 September 2011 в 20:46
поделиться