本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

String.IsInterned 方法 (String)

 

检索对指定 String 的引用。

命名空间:   System
程序集:  mscorlib(mscorlib.dll 中)

public static string IsInterned(
	string str
)

参数

str

要在暂存池中搜索的字符串。

返回值

Type: System.String

如果 str 在公共语言运行时的暂存池中,则返回对它的引用;否则返回 null

Exception Condition
ArgumentNullException

strnull

公共语言运行时自动维护一个表,称为实习池,它包含在一个程序,以及任何唯一实例中声明的每个唯一的字符串常量的单个实例 String 以编程方式添加通过调用 Intern 方法。

暂存池可以节约的字符串存储空间。如果将一个文字字符串常量分配给几个变量,每个变量设置为引用相同的常量,而不是引用的几个不同实例暂存池中 String 具有完全相同的值。

此方法查找 str 暂存池中。如果 str 已经过暂留,则对该实例的引用是返回 ; 否则为 null 返回。

将此方法 Intern 方法。

此方法不返回一个布尔值。如果您调用该方法,因为您希望一个布尔值,该值指示是否暂存特定字符串,您可以使用如下所示的代码。

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_note注意

从.NET Framework 2.0 版开始,您可以重写暂存池中使用当您使用 Ngen.exe(本机映像生成器) 将程序集安装到本地计算机上的本机映像缓存。有关详细信息,请参阅备注部分中的性能注意事项 Intern 属性。

下面的示例演示文字字符串自动由编译器留用的过程。

// 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
1.1 后可用
Silverlight
2.0 后可用
Windows Phone Silverlight
7.0 后可用
返回页首
显示: