この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

String.IsInterned メソッド (String)

 

公開日: 2016年10月

指定した String への参照を取得します。

名前空間:   System
アセンブリ:  mscorlib (mscorlib.dll 内)

public static string IsInterned(
	string str
)

パラメーター

str
Type: System.String

インターン プールから検索する文字列。

戻り値

Type: System.String

str が共通言語ランタイムのインターン プール内にある場合は、それへの参照。それ以外の場合は null

Exception Condition
ArgumentNullException

strnull です。

共通言語ランタイムが自動的に 1 つのインスタンスの一意のインスタンスと同様に、プログラムで宣言されている各一意のリテラル文字列定数を含むインターン プールと呼ばれる、テーブルを保持します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 version 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 以降で使用可能
トップに戻る
表示: