2017-07-25 115 views
0

我想设置一个string s1来引用另一个string s2。我并不是说将s2转换成ref的方法。 我希望s1s2相同价值和参考因此,Object.ReferenceEquals(s1,s2)将返回true。如何设置一个字符串来引用另一个字符串

我该怎么做?有没有更好的方式来做到这一点?

+3

去查找字符串实习。 –

+1

非常不清楚你想达到什么。显然's1 = s2'实现了参考平等,但它听起来并不像你正在寻找的那样。另外,请确保展示您已经“不太好”的方式,并解释您希望代码更好的方式。 –

+0

@AlexeiLevenkov我只是认为字符串是一个结构,字符串是一个对象。我的错。 –

回答

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方法,但这会影响您的字符串与intern池中的任何其他字符串共享数据,而这恰好是相同的。在这两种情况下你都可以节省内存

+0

实际上,我发现Object.ReferenceEquals返回==的相同值。我仍在寻找比较参考的方法。 –

+0

你是如何得出这个结论的? –

+0

您可以使用Object.ReferenceEquals或(object)s1 ==(object)s2。 –

-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。这意味着在这种情况下它匹配的值。

+0

不知道如何评论ReferenceEquals的行为回答这个问题......一些澄清可能有帮助(以及解释什么确切的问题,你试图回答)。 –

+0

对不起,我不确定他是否想要使用字符串或字符串。在第一种情况下,我走出轨道。 – Romeo

+0

我不认为我可以使用字符串,因为我实际上使用TextBox对象并检索TextBox.Text,它是一个字符串。 –

相关问题