Auf Englisch lesen

Teilen über


String.IsInterned(String) Methode

Definition

Ruft einen Verweis auf einen angegebenen String ab.

C#
public static string? IsInterned(string str);
C#
public static string IsInterned(string str);

Parameter

str
String

Die im Internpool zu suchende Zeichenfolge.

Gibt zurück

Ein Verweis auf str, wenn sich dieser im Internpool der Common Language Runtime befindet; andernfalls null.

Ausnahmen

str ist null.

Beispiele

Im folgenden Beispiel wird veranschaulicht, dass Literalzeichenfolgen automatisch vom Compiler interniert werden.

C#
// 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.

Hinweise

Die Common Language Runtime verwaltet automatisch eine Tabelle, die als intern-Pool bezeichnet wird, die eine einzelne Instanz jeder in einem Programm deklarierten eindeutigen Literalzeichenfolgenkonstante sowie jede eindeutige Instanz von enthält, die String Sie programmgesteuert durch Aufrufen der Intern -Methode hinzufügen.

Der interne Pool spart Zeichenfolgenspeicher. Wenn Sie mehrere Variablen eine Literalzeichenfolgenkonstante zuweisen, wird jede Variable so festgelegt, dass sie im intern-Pool auf dieselbe Konstante verweist, anstatt auf mehrere verschiedene Instanzen von zu verweisen, die String identische Werte aufweisen.

Diese Methode sucht str im Intern-Pool nach. Wenn str bereits interniert wurde, wird ein Verweis auf diese Instanz zurückgegeben, null andernfalls wird zurückgegeben.

Vergleichen Sie diese Methode mit der Intern -Methode.

Diese Methode gibt keinen booleschen Wert zurück. Wenn Sie die -Methode aufrufen, weil Sie einen booleschen Wert benötigen, der angibt, ob eine bestimmte Zeichenfolge interniert ist, können Sie Code wie den folgenden verwenden.

C#
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.

Hinweis

Sie können die Verwendung des intern-Pools außer Kraft setzen, wenn Sie Ngen.exe (Native Image Generator) verwenden, um eine Assembly im nativen Imagecache auf einem lokalen Computer zu installieren. Weitere Informationen finden Sie unter Leistungsüberlegungen im Abschnitt Hinweise für die Intern -Eigenschaft.

Gilt für:

Produkt Versionen
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Weitere Informationen