Почему ReSharper предупреждает в Char.ToString () когда не указано CultureInfo явно?

мне было интересно, почему ReSharper предупреждает меня, когда я пытаюсь преобразовать символ в строку, не давая конкретной информации о культуре.

есть ли случай, когда он может быть преобразован по-разному в двух системах?

пример:

var str = ' '.ToString();

по умолчанию появится следующее предупреждение ReSharper:

явно укажите культуру в преобразовании строк.

2 ответов


это потому, что ReSharper видит, что тип реализует IConvertible имеющего ToString(IFormatProvider).

System.Char сам по себе не выставляет открытый метод с этой подписью, Даже если документация указывает на это:

Char.ToString overloads

если вы посмотрите на перегрузку с IFormatProvider параметр вы увидите это уведомление:

осуществляет
IConvertible.ToString(IFormatProvider)

и этого реплика:

на провайдер параметр игнорируется; он не участвует в этой операции.

ReSharper просто замечает наличие этого метода и вызов ToString без IFormatProvider и таким образом жалуется, в этом случае вы можете смело игнорировать его.


Я нашел это http://csharpindepth.com/Articles/General/Strings.aspx

некоторые из странностей Unicode приводят к странностям в строке и обработка символов. Многие из методов string чувствительны к культуре - другими словами, то, что они делают, зависит от культуры текущего нитка. например, что бы вы ожидали "я".toUpper (), чтобы вернуться? Большинство людей сказали бы "я", но по-турецки правильный ответ"я" (Юникод U + 0130, "Латинская столица I с точкой выше")