MSDN Library
信息
您所需的主题如下所示。但此主题未包含在此库中。

String.Intern 方法

2013/12/13

检索系统对指定 String 的引用。

Namespace:  System
程序集:  mscorlib(位于 mscorlib.dll 中)

public static string Intern(
	string str
)

参数

str
类型: System.String
要在暂存池中搜索的字符串。

返回值

类型: System.String
如果暂存了 str,则返回系统对其的引用;否则返回对值为 str 的字符串的新引用。

异常条件
ArgumentNullException

strnull

公共语言运行时通过维护一个表来存放字符串,该表称为“暂存池”,它包含程序中以编程方式声明或创建的每个唯一的字符串的一个引用。因此,具有特定值的字符串的实例在系统中只有一个。

例如,如果将同一字符串分配给几个变量,运行时就会从暂存池中检索对该字符串的相同引用,并将它分配给各个变量。

Intern 方法使用暂存池来搜索与 str 值相等的字符串。如果存在这样的字符串,则返回暂存池中它的引用。如果不存在,则向暂存池添加对 str 的引用,然后返回该引用。

在下面的示例中,值为“MyTest”的字符串 s1 已经留用,因为它是程序中的文本。System.Text.StringBuilder 类生成与 s1 同值的新字符串对象。对该字符串的引用赋给 s2Intern 方法搜索与 s2 具有相同值的字符串。由于存在此类字符串,因此该方法返回赋给 s1 的同一引用。之后该引用又赋给 s3。引用 s1s2 相比较的结果是不相等,因为它们引用不同的对象;而引用 s1s3 相比较的结果是相等,因为它们引用同一字符串。


string s1 = "MyTest";
string s2 = new StringBuilder().Append("My").Append("Test").ToString();
string s3 = String.Intern(s2);
outputBlock.Text += ((Object)s2 == (Object)s1) + "\n"; // Different references.
outputBlock.Text += ((Object)s3 == (Object)s1) + "\n"; // The same reference.


将此方法与 IsInterned 方法进行比较。

下面的代码示例使用三个值相等的字符串确定新建的字符串和留用的字符串是否相等。


// Sample for String.Intern(String)
using System;
using System.Text;

class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      String s1 = "MyTest";
      String s2 = new StringBuilder().Append("My").Append("Test").ToString();
      String s3 = String.Intern(s2);
      outputBlock.Text += String.Format("s1 == '{0}'", s1) + "\n";
      outputBlock.Text += String.Format("s2 == '{0}'", s2) + "\n";
      outputBlock.Text += String.Format("s3 == '{0}'", s3) + "\n";
      outputBlock.Text += String.Format("Is s2 the same reference as s1?: {0}", (Object)s2 == (Object)s1) + "\n";
      outputBlock.Text += String.Format("Is s3 the same reference as s1?: {0}", (Object)s3 == (Object)s1) + "\n";
   }
}
/*
This example produces the following results:
s1 == 'MyTest'
s2 == 'MyTest'
s3 == 'MyTest'
Is s2 the same reference as s1?: False
Is s3 the same reference as s1?: True
*/


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

显示:
© 2016 Microsoft