Почему ReSharper предупреждает в Char.ToString () когда не указано CultureInfo явно?
мне было интересно, почему ReSharper предупреждает меня, когда я пытаюсь преобразовать символ в строку, не давая конкретной информации о культуре.
есть ли случай, когда он может быть преобразован по-разному в двух системах?
пример:
var str = ' '.ToString();
по умолчанию появится следующее предупреждение ReSharper:
явно укажите культуру в преобразовании строк.
2 ответов
это потому, что ReSharper видит, что тип реализует IConvertible
имеющего ToString(IFormatProvider)
.
System.Char
сам по себе не выставляет открытый метод с этой подписью, Даже если документация указывает на это:
если вы посмотрите на перегрузку с IFormatProvider
параметр вы увидите это уведомление:
осуществляет
IConvertible.ToString(IFormatProvider)
и этого реплика:
на провайдер параметр игнорируется; он не участвует в этой операции.
ReSharper просто замечает наличие этого метода и вызов ToString
без IFormatProvider
и таким образом жалуется, в этом случае вы можете смело игнорировать его.
Я нашел это http://csharpindepth.com/Articles/General/Strings.aspx
некоторые из странностей Unicode приводят к странностям в строке и обработка символов. Многие из методов string чувствительны к культуре - другими словами, то, что они делают, зависит от культуры текущего нитка. например, что бы вы ожидали "я".toUpper (), чтобы вернуться? Большинство людей сказали бы "я", но по-турецки правильный ответ"я" (Юникод U + 0130, "Латинская столица I с точкой выше")