如何设置一个字符串以引用另一个

时间:2017-07-25 01:44:54

标签: c# string reference

我想设置一个string s1来引用另一个string s2。我并不是说将s2传递给带有ref的方法。 我希望只需要s1值和参考中的s2相同。因此,Object.ReferenceEquals(s1,s2)将返回true。

我该怎么做?还有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

很简单。例子:

if (s1 == s2) s1 = s2; // If you need to verify their values are equal first.

s1 = s2; // If you don't need to verify first.

PS:你说“希望s1与s2相同”,所以这与上面相反。

您也可以使用String.Intern方法,但这会导致您的字符串与实习池中的任何其他字符串共享数据,该字符串恰好相同。在这两种情况下都可以节省内存。

答案 1 :(得分:-1)

我认为这不是Object.ReferenceEquals(s1,s2)所做的。

此示例来自MSDN:

using System;

public class Example
{
   public static void Main()
   {
      String s1 = "String1";
      String s2 = "String1";
      Console.WriteLine("s1 = s2: {0}", Object.ReferenceEquals(s1, s2));
      Console.WriteLine("{0} interned: {1}", s1, 
                        String.IsNullOrEmpty(String.IsInterned(s1)) ? "No" : "Yes");

      String suffix = "A";
      String s3 = "String" + suffix;
      String s4 = "String" + suffix;
      Console.WriteLine("s3 = s4: {0}", Object.ReferenceEquals(s3, s4));
      Console.WriteLine("{0} interned: {1}", s3, 
                        String.IsNullOrEmpty(String.IsInterned(s3)) ? "No" : "Yes");
   }
}
// The example displays the following output:
//       s1 = s2: True
//       String1 interned: Yes
//       s3 = s4: False
//       StringA interned: No

s1和s2是不同的实例,但Object.ReferenceEquals(s1,s2)返回true。这意味着在这种情况下它匹配值。