Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Metodo String.IsInterned

Recupera un riferimento a un oggetto String specificato.

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

public static string IsInterned(
	string str
)

Parametri

str
Tipo: System.String
Stringa da cercare nel pool interno.

Valore restituito

Tipo: System.String
Riferimento a str se questo è presente nel pool interno di Common Language Runtime; in caso contrario, null.

EccezioneCondizione
ArgumentNullException

str è null.

In Common Language Runtime viene gestita in modo automatico una tabella, definita pool interno, nella quale è contenuta una singola istanza di ogni costante di stringa letterale dichiarata in un programma e in un'istanza univoca di String che si aggiunge automaticamente chiamando il metodo Intern.

Nel pool interno viene gestita l'archiviazione delle stringhe. Se si assegna una costante di rappresentazione formale di stringa a più variabili, ciascuna variabile viene impostata per fare riferimento alla stessa costante del pool interno invece di fare riferimento a diverse altre istanze dell'oggetto String con valori identici.

Questo metodo ricerca la stringa str nel pool interno. Se il parametro str è già stato inserito, viene restituito un riferimento a tale istanza; in caso contrario, viene restituito null.

Confrontare questo metodo con il metodo Intern.

Questo metodo non restituisce valori booleani. Se si chiama il metodo in cui un valore booleano che indica se una determinata stringa è interna, è possibile utilizzare il codice seguente.


using System;

public class Example
{
   public static void Main()
   {
      string str1 = "a";
      string str2 = str1 + "b";
      string str3 = str2 + "c";
      string[] strings = { "value", "part1" + "_" + "part2", str3, 
                           String.Empty, null };
      foreach (var value in strings) {
         if (value == null) continue;

         bool interned = String.IsInterned(value) != null;
         if (interned)
            Console.WriteLine("'{0}' is in the string intern pool.", 
                              value);
         else
            Console.WriteLine("'{0}' is not in the string intern pool.",
                              value);                      
      }
   }
}
// The example displays the following output:
//       'value' is in the string intern pool.
//       'part1_part2' is in the string intern pool.
//       'abc' is not in the string intern pool.
//       '' is in the string intern pool.


NotaNota

A partire da .NET Framework versione 2.0, è possibile eseguire l'override del pool interno quando si utilizza Ngen.exe (generatore di immagini native) per installare un assembly nella cache delle immagini native in un computer locale. Per ulteriori informazioni, vedere le considerazioni sulle prestazioni nella sezione Note della proprietàIntern.

Nell'esempio riportato di seguito vengono illustrate le modalità con cui le stringhe letterali vengono inserite automaticamente dal compilatore.


// Sample for String.IsInterned(String)
using System;
using System.Text;
using System.Runtime.CompilerServices;

// In the .NET Framework 2.0 the following attribute declaration allows you to 
// avoid the use of the interning when you use NGEN.exe to compile an assembly 
// to the native image cache.
[assembly: CompilationRelaxations(CompilationRelaxations.NoStringInterning)]
class Sample
{
    public static void Main()
    {
        // String str1 is known at compile time, and is automatically interned.
        String str1 = "abcd";

        // Constructed string, str2, is not explicitly or automatically interned.
        String str2 = new StringBuilder().Append("wx").Append("yz").ToString();
        Console.WriteLine();
        Test(1, str1);
        Test(2, str2);
    }

    public static void Test(int sequence, String str)
    {
        Console.Write("{0}) The string, '", sequence);
        String strInterned = String.IsInterned(str);
        if (strInterned == null)
            Console.WriteLine("{0}', is not interned.", str);
        else
            Console.WriteLine("{0}', is interned.", strInterned);
    }
}

//This example produces the following results:

//1) The string, 'abcd', is interned.
//2) The string, 'wxyz', is not interned.

//If you use NGEN.exe to compile the assembly to the native image cache, this
//example produces the following results:

//1) The string, 'abcd', is not interned.
//2) The string, 'wxyz', is not interned.



.NET Framework

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

.NET per applicazioni Windows Phone

Supportato in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2015 Microsoft