Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo String.Intern (String)

 

Data di pubblicazione: ottobre 2016

Recupera il riferimento del sistema all'oggetto String specificato.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

public static string Intern(
	string str
)

Parametri

str
Type: System.String

Stringa da cercare nel pool di centralizzazione.

Valore restituito

Type: System.String

Riferimento del sistema a str, se è centralizzato; in caso contrario, nuovo riferimento a una stringa con il valore di str.

Exception Condition
ArgumentNullException

str è null.

Common language runtime gestisce l'archiviazione delle stringhe mediante una tabella denominata pool interno, che contiene un unico riferimento a ogni stringa letterale univoca dichiarata o creata a livello di codice nel programma. Di conseguenza, un'istanza di una stringa letterale con un valore specifico è presente una sola volta nel sistema.

Ad esempio, se si assegna la stessa stringa letterale a diverse variabili, il runtime recupera dal pool di centralizzazione lo stesso riferimento la stringa letterale e viene assegnato a ogni variabile.

Il Intern metodo utilizza il pool interno per cercare una stringa uguale al valore di str. Se tale stringa esiste, viene restituito il relativo riferimento nel pool di centralizzazione. Se la stringa non esiste, un riferimento a str viene aggiunto al pool interno, che quindi viene restituito.

Nell'esempio seguente, la stringa s1, che ha un valore "MyTest", è già inserita perché è un valore letterale nel programma. La System.Text.StringBuilder classe genera un nuovo oggetto stringa che ha lo stesso valore di s1. Un riferimento a tale stringa viene assegnato a s2. Il Intern metodo cerca una stringa che contiene lo stesso valore s2. Poiché tale stringa esiste, il metodo restituisce lo stesso riferimento assegnato a s1. Tale riferimento viene quindi assegnato a s3. I riferimenti s1 e S2 confrontare diversi perché fanno riferimento a oggetti diversi. i riferimenti s1 e s3 risultano uguali perché si riferiscono alla stessa stringa.

string s1 = "MyTest"; 
string s2 = new StringBuilder().Append("My").Append("Test").ToString(); 
string s3 = String.Intern(s2); 
Console.WriteLine((Object)s2==(Object)s1); // Different references.
Console.WriteLine((Object)s3==(Object)s1); // The same reference.

Questo metodo per confrontare il IsInterned metodo.

Nel .NET Framework 3.5 Service Pack 1, Intern metodo ripristinato il comportamento in .NET Framework 1.0 e 1.1 relativamente all'inserimento di una stringa vuota. Nell'esempio seguente, la variabile str1 viene assegnato un riferimento a Empty, e la variabile str2 viene assegnato il riferimento a Empty che viene restituita chiamando il Intern metodo dopo la conversione di un StringBuilder oggetto il cui valore è Empty in una stringa. Quindi, i riferimenti contenuti str1 e str2 vengono confrontati per verificarne l'uguaglianza.

string str1 = String.Empty;
string str2 = String.Empty;

StringBuilder sb = new StringBuilder().Append(String.Empty);
str2 = String.Intern(sb.ToString());	

if((object)str1==(object)str2)
	Console.WriteLine("The strings are equal.");
else
	Console.WriteLine("The strings are not equal.");

Nel .NET Framework 1.0, .NET Framework 1.1, e .NET Framework 3.5 SP1, str1 e str2 sono uguali. Nel .NET Framework 2.0 Service Pack 1 e .NET Framework 3.0, str1 e str2 non sono uguali.

Se si sta tentando di ridurre la quantità totale di memoria allocata dall'applicazione, tenere presente che l'inserimento di una stringa ha due effetti collaterali indesiderati. In primo luogo, la memoria allocata per inserite String oggetti è probabile che vengano rilasciate finché non termina con common language runtime (CLR). Il motivo è che il riferimento del CLR per inserito String oggetto può persistere anche dopo l'applicazione o persino del dominio applicazione, viene terminato. In secondo luogo, per collaterale una stringa, è innanzitutto necessario creare la stringa. La memoria utilizzata da di String oggetto deve essere comunque allocato, anche se la memoria verrà infine sottoposto a garbage collection.

.NET Framework versione 2.0 viene introdotta la CompilationRelaxations.NoStringInterningmembro di enumerazione. Il NoStringInterning membro contrassegna un assembly che non richiedono stringhe letterali. È possibile applicare NoStringInterning a un assembly utilizzando il CompilationRelaxationsAttribute attributo. Inoltre, quando si utilizza il Ngen.exe (Native Image Generator) per compilare un assembly prima della fase di esecuzione, le stringhe non vengono inserite in tutti i moduli.

Nell'esempio seguente utilizza tre stringhe hanno lo stesso valore per determinare se una stringa appena creata e una stringa inserita sono uguali.

// Sample for String.Intern(String)
using System;
using System.Text;

class Sample {
    public static void Main() {
    String s1 = "MyTest";
    String s2 = new StringBuilder().Append("My").Append("Test").ToString(); 
    String s3 = String.Intern(s2); 
    Console.WriteLine("s1 == '{0}'", s1);
    Console.WriteLine("s2 == '{0}'", s2);
    Console.WriteLine("s3 == '{0}'", s3);
    Console.WriteLine("Is s2 the same reference as s1?: {0}", (Object)s2==(Object)s1); 
    Console.WriteLine("Is s3 the same reference as s1?: {0}", (Object)s3==(Object)s1);
    }
}
/*
This example produces the following results:
s1 == 'MyTest'
s2 == 'MyTest'
s3 == 'MyTest'
Is s2 the same reference as s1?: False
Is s3 the same reference as s1?: True
*/

.NET Framework
Disponibile da 1.1
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Torna all'inizio
Mostra: