Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método String.IsInterned (String)

 

Publicado: octubre de 2016

Recupera una referencia a un objeto String especificado.

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

public static string IsInterned(
	string str
)

Parámetros

str
Type: System.String

Cadena que se va a buscar en el grupo de internos.

Valor devuelto

Type: System.String

Una referencia a str si está en el grupo de internos de Common Language Runtime; de lo contrario, null.

Exception Condition
ArgumentNullException

El valor de str es null.

Common language runtime mantiene automáticamente una tabla, denominada el grupo de internos, que contiene una sola instancia de cada constante de cadena literal única declarada en un programa, así como cualquier instancia única de String agregar mediante programación mediante una llamada a la Intern método.

El grupo de internos conserva el almacenamiento de cadenas. Si asigna una constante de cadena literal a varias variables, cada variable se establece para hacer referencia a la misma constante en el grupo de internos en lugar de hacer referencia a varias instancias diferentes de String que tienen valores idénticos.

Este método busca un str en el grupo de internos. Si str ya ha sido aplicado el método Intern, una referencia a dicha instancia es devuelto; de lo contrario, null se devuelve.

Compare este método con el Intern método.

Este método no devuelve un valor booleano. Si se llama al método, ya que desea que un valor booleano que indica si una cadena determinada se aplica el método Intern, puede utilizar código como el siguiente.

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_noteNota

A partir de la versión 2.0 de .NET Framework, puede reemplazar el uso del grupo de internos cuando se usa el Ngen.exe (Native Image Generator) para instalar un ensamblado en la caché de imágenes nativas en un equipo local. Para obtener más información, consulte Consideraciones sobre el rendimiento en la sección Comentarios para el Intern propiedad.

En el ejemplo siguiente se muestra que las cadenas literales se aplica el método Intern automáticamente por el compilador.

// 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 desde 1.1
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Volver al principio
Mostrar: