2016-01-11 7 views
7

Мне было интересно, почему ReSharper предупреждает меня, когда я пытаюсь преобразовать символ в строку без предоставления конкретной информации о культуре.Почему ReSharper предупреждает о Char.ToString(), если явно не указать CultureInfo?

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

Пример:

var str = ' '.ToString(); 

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

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

+0

Какое предупреждение точно? Создайте [Минимальный, Полный и Подтверждающий пример] (http://stackoverflow.com/help/mcve) на основе вашей проблемы. –

+0

Что такое код в точности? –

+0

Это хороший вопрос, который я задаю себе много раз. Но вам нужно добавить пример кода и точное сообщение –

ответ

10

Это происходит потому, что ReSharper видит, что тип реализует IConvertible, который имеет ToString(IFormatProvider).

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

Char.ToString overloads

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

Реализует
IConvertible.ToString(IFormatProvider)

и это замечание:

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

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

+0

Мне нравится этот ответ, но он еще не отвечает на мой (второй) вопрос: есть ли побочные эффекты между разными системами, не обращая на него внимания. Я хотел бы получить прямой вывод по всей информации, которую вы мне дали. :) – Jannik

+2

Нет, «вы можете смело игнорировать его». Один символ будет преобразован в строку с одним символом, здесь нет преобразования. –

+0

[Источник ссылки] (http://referencesource.microsoft.com/#mscorlib/system/char.cs,9f693c2a17b40531) также показывает, что это правда. –

-2

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

Некоторые странности приводят к Unicode странностей в строке и обработки символов. Многие из строковых методов чувствительны к культуре - Другими словами, то, что они делают, зависит от культуры текущего потока . Например, что бы вы ожидали возвращения «i» .toUpper()? Большинство людей сказали бы, «я», но на турецком языке правильный ответ «Я» (Unicode U + 0130, «Latin капитал I с точкой над»)

+2

Дело не в этом. В этом случае методов 'ToUpper' или' ToLower' не существует. –