Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

String.IsInterned méthode (String)

 

Date de publication : novembre 2016

Récupère une référence à un String spécifié.

Espace de noms:   System
Assembly:  mscorlib (dans mscorlib.dll)

public static string IsInterned(
	string str
)

Paramètres

str
Type: System.String

Chaîne à rechercher dans le pool interne.

Valeur de retour

Type: System.String

Référence à str si elle figure dans le pool interne du Common Language Runtime ; sinon, null.

Exception Condition
ArgumentNullException

str a la valeur null.

Le common language runtime gère automatiquement une table, appelée pool interne, qui contient une seule instance de chaque constante de chaîne littérale unique déclarée dans un programme, ainsi qu’une instance unique de String vous ajoutez par programme en appelant le Intern (méthode).

Le pool interne conserve le stockage de chaînes. Si vous assignez une constante de chaîne littérale à plusieurs variables, chaque variable est définie pour référencer la même constante dans le pool interne au lieu de référencer plusieurs instances différentes de String qui ont des valeurs identiques.

Cette méthode recherche str dans le pool interne. Si str a déjà été dans le pool interne, une référence à cette instance est retournée ; sinon, null est retourné.

Comparez cette méthode à la Intern (méthode).

Cette méthode ne retourne pas une valeur booléenne. Si vous appelez la méthode parce que vous souhaitez une valeur booléenne qui indique si une chaîne particulière est dans le pool interne, vous pouvez utiliser le code suivant.

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.
System_CAPS_noteRemarque

À compter de .NET Framework version 2.0, vous pouvez substituer l’utilisation du pool interne lorsque vous utilisez le Ngen.exe (Native Image Generator) pour installer un assembly dans le cache des images natives sur un ordinateur local. Pour plus d’informations, consultez les considérations relatives aux performances dans la section Notes pour le Intern propriété.

L’exemple suivant montre que les chaînes littérales sont intégrés automatiquement par le compilateur.

// 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
Disponible depuis 1.1
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Retour au début
Afficher: