c# - String.Empty versus ""




(4)

Possibile duplicato:
Qual è la differenza tra String.Empty e ""

In che modo String.Empty è diverso da "" ?


Ho sentito alcune voci su String.Empty essere sempre lo stesso oggetto, mentre "" è un nuovo oggetto ad ogni occorrenza, ma non so esattamente se è giusto.

La ragione principale di String.Empty è la leggibilità.


Non è diverso

http://msdn.microsoft.com/en-us/library/system.string.empty.aspx :

Il valore di questo campo è la stringa di lunghezza zero, "".

Nel codice dell'applicazione, questo campo è più comunemente utilizzato nelle assegnazioni per inizializzare una variabile stringa su una stringa vuota. Per verificare se il valore di una stringa è String.Empty, utilizzare il metodo IsNullOrEmpty.


Per la maggior parte String.Empty is identical to "" ma di solito trovo più semplice usare String.IsNullOrEmpty(str) invece di dover confrontare str == "" || str == null str == "" || str == null Anche se si è su .NET 4.0 String.IsNullOrWhiteSpace(str) copre ancora più casi ed è di gran lunga il migliore.


Secondo Brad Abrams :

Come suggerisce David, la differenza tra String.Empty e "" è piuttosto piccola, ma c'è una differenza. "" In realtà crea un oggetto, probabilmente verrà estratto dal pool interno di stringhe, ma comunque ... mentre String.Empty non crea alcun oggetto ... quindi se stai veramente cercando l'efficienza della memoria, ti suggerisco String.Empty. Tuttavia, dovresti tenere a mente che la differenza è così trival che non ti piacerà mai vederlo nel tuo codice ...

Come per System.String.Empty o string.Empty o String.Empty ... il mio livello di assistenza è basso ;-)

Aggiornamento (6/3/2015):

È stato menzionato nei commenti che la citazione precedente del 2003 non è più vera (presumo che si riferisca all'affermazione che "" realtà crea un oggetto). Quindi ho appena creato un paio di semplici programmi di console in C # 5 (VS 2013):

class Program
{
    static void Main()
    {
        // Outputs "True"
        Debug.WriteLine(string.IsInterned(string.Empty) != null);
    }
}

class Program
{
    static void Main()
    {
        // Outputs "True"
        Debug.WriteLine(string.IsInterned("") != null);
    }
}

Ciò dimostra che sia "" sia String.Empty sono entrambi internati all'avvio del codice, il che significa che per tutti gli scopi pratici sono uguali.

La parte più importante del commento di Brad è questa:

dovresti tenere a mente che la differenza è così trival che ti piacerà non vederla mai nel tuo codice ...

Questa è la linea di fondo. Scegliere tra "" e String.Empty non è una decisione basata sulle prestazioni. Non perdere molto tempo a pensarci. Scegli in base a ciò che trovi più leggibile, o qualunque convenzione sia già in uso nel tuo progetto.






c#  

c#