Convert.ChangeType вызывает ToString () внутренне? - PullRequest
0 голосов
/ 09 июня 2011

Есть ли разница между:

value.ToString()

и

(string)Convert.ChangeType(value, typeof(string))

Ответы [ 2 ]

3 голосов
/ 09 июня 2011

Вызывает IConvertable.ToString после проверки того, что типы IConvertable.

case TypeCode.String:
   return (object) convertible.ToString(provider);

Таким образом, в результате выполняется гораздо больше работы только для вызова ToString с IFormatProvider.Все будет зависеть от реализации типа, который реализует IConvertable.

. provider происходит от (IFormatProvider) Thread.CurrentThread.CurrentCulture.

Это то, что int делает.

public override string ToString()
{
  return Number.FormatInt32(this, (string) null, NumberFormatInfo.CurrentInfo);
}

public string ToString(string format)
{
  return Number.FormatInt32(this, format, NumberFormatInfo.CurrentInfo);
}

public string ToString(IFormatProvider provider)
{
  return Number.FormatInt32(this, (string) null, NumberFormatInfo.GetInstance(provider));
}

public string ToString(string format, IFormatProvider provider)
{
  return Number.FormatInt32(this, format, NumberFormatInfo.GetInstance(provider));
}
1 голос
/ 09 июня 2011

когда целевой тип является строковым, Convert.ChangeType работает следующим образом:


if (value == null)
{
    return null;
}

var convertible = value as IConvertible;
if (convertible == null)
{
    throw new InvalidCastException();
}

return convertible.ToString();

, поэтому он сильно отличается от value.ToString ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...