2016-01-11 15 views
7

Mi chiedevo perché ReSharper mi avvisasse, quando sto provando a convertire un char in una stringa senza fornire informazioni specifiche sulla cultura.Perché ReSharper avvisa in Char.ToString() quando non si specifica CultureInfo in modo esplicito?

C'è qualche caso, dove potrebbe essere convertito in modo diverso su due sistemi?

Esempio:

var str = ' '.ToString(); 

il seguente avviso ReSharper apparirà di default:

Specificare una cultura nella conversione di stringa in modo esplicito.

+0

Qual è l'avviso esattamente? Crea un [Esempio minimo, completo e verificabile] (http://stackoverflow.com/help/mcve) in base al tuo problema. –

+0

Qual è il codice esattamente? –

+0

Questa è una buona domanda che mi sto ponendo molte volte. Ma è necessario aggiungere un codice di esempio e il messaggio esatto –

risposta

10

Questo perché ReSharper vede che il tipo implementa IConvertible che ha ToString(IFormatProvider).

System.Char di per sé non espone un metodo pubblico con quella firma, anche se il documentation indica lo fa:

Char.ToString overloads

Se si guarda al di sovraccarico con il parametro IFormatProvider vedrete questo avviso:

Implementa
IConvertible.ToString(IFormatProvider)

e questa osservazione:

Il parametro fornitore viene ignorato; non partecipa a questa operazione.

ReSharper appena si accorge della presenza di tale metodo, e la chiamata a ToString senza IFormatProvider e si lamenta, quindi, in questo caso si può tranquillamente ignorarlo.

+0

Mi piace questa risposta, ma non risponde alla mia (seconda) domanda direttamente ancora: ci sono degli effetti collaterali tra i diversi sistemi che lo ignorano. Mi piacerebbe avere una conclusione diretta sotto tutte le informazioni che mi hai dato. :) – Jannik

+2

No, "puoi tranquillamente ignorarlo". Un singolo personaggio verrà convertito in una stringa con un singolo carattere, non si verifica alcuna conversione qui. –

+0

Anche la [fonte di riferimento] (http://referencesource.microsoft.com/#mscorlib/system/char.cs,9f693c2a17b40531) mostra che questo è vero. –

-2

ho trovato questo http://csharpindepth.com/Articles/General/Strings.aspx

Alcune delle stranezze di piombo Unicode per stranezze nella stringa e la gestione dei caratteri. Molti dei metodi di stringa sono sensibili alla cultura - in altre parole, ciò che fanno dipende dalla cultura dell'attuale thread . Ad esempio, cosa ti aspetteresti che "i" .toUpper() restituisca? maggior parte delle persone dire "io", ma in Turco la risposta corretta è "Io" (Unicode U + 0130, "latina I maiuscola con punto sopra")

+2

Non è questo il punto qui. In questo caso non esistono metodi 'ToUpper' o' ToLower'. –

Problemi correlati