📜  C#|如何检索对指定字符串的引用

📅  最后修改于: 2021-05-29 13:19:04             🧑  作者: Mango

String.IsInterned(String)方法方法用于检索对指定String的引用。此方法在内部缓冲池中查找指定的字符串。
如果指定的字符串已经被插入,则返回对该实例的引用。否则,返回null。在这里,内部缓冲池是一个表,其中包含程序中声明的每个唯一字面量字符串常量的单个实例,以及通过调用Intern方法以编程方式添加的String的任何唯一实例。

注意: String.Intern(String)方法和String.IsInterned(String)方法之间的主要区别在于,如果不存在该字符串,则通过将指定字符串的引用添加到内部缓冲池,Intern方法将返回一个引用。但是,如果字符串不存在,则IsInterned方法将返回null。

句法:

public static string IsInterned (string strA);

在这里, strA是一个字符串,用于在内部池中进行搜索。

返回值:该方法的返回类型为System.String 。如果strA在CLR(公共语言运行时)内部缓冲池中存在,则此方法将返回对strA的引用。否则,返回null。

异常:此方法将使str的ArgumentNullException为null。

下面给出了一些示例,以更好地理解实现:

范例1:

// C# program to check if the given 
// string is in intern pool or not
using System;
  
class GFG {
      
    // main method
    public static void Main()
    {
        // strings
        string str1 = "Monday";
        string str2 = str1 + "-day";
        string[] pool = {"Tuesday", "Wednesday",
                         "Thursday", str2};
                           
        // checking in intern pool
        foreach(var item in pool)
        {
  
            // retrive reference of strings
            bool value = String.IsInterned(item) != null;
  
            if (value)
  
                // if the string in intern pool then print
                Console.WriteLine("{0}: Yes", item);
                  
            else
              
                // if string in not intern pool then print
                Console.WriteLine("{0}: No", item);
        }
    }
}

输出:

Tuesday: Yes
Wednesday: Yes
Thursday: Yes
Monday-day: No

范例2:

// C# program to check if the given 
// string is in intern pool or not
using System;
  
class GFG {
      
    // main method
    public static void Main()
    {
        // strings
        string str1 = "Geeks";
        string str2 = str1 + "-day";
          
        // this will give error as 
        // null is present in pool
        string[] pool = {"GFG", "DSA",
                         "C#", null};
                           
        // checking in intern pool
        foreach(var item in pool)
        {
  
            // retrive reference of strings
            bool value = String.IsInterned(item) != null;
  
            if (value)
  
                // if the string in intern pool then print
                Console.WriteLine("{0}: Yes", item);
                  
            else
              
                // if string in not intern pool then print
                Console.WriteLine("{0}: No", item);
        }
    }
}

运行时错误:

参考:

  • https://docs.microsoft.com/zh-cn/dotnet/api/system。字符串.isinterned?view = netframework-4.7.2#System_String_IsInterned_System_String_