我想设置一个string s1
来引用另一个string s2
。我并不是说将s2
转换成ref的方法。 我希望s1
与s2
相同价值和参考。因此,Object.ReferenceEquals(s1,s2)将返回true。如何设置一个字符串来引用另一个字符串
我该怎么做?有没有更好的方式来做到这一点?
我想设置一个string s1
来引用另一个string s2
。我并不是说将s2
转换成ref的方法。 我希望s1
与s2
相同价值和参考。因此,Object.ReferenceEquals(s1,s2)将返回true。如何设置一个字符串来引用另一个字符串
我该怎么做?有没有更好的方式来做到这一点?
很简单。例如:
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池中的任何其他字符串共享数据,而这恰好是相同的。在这两种情况下你都可以节省内存
实际上,我发现Object.ReferenceEquals返回==的相同值。我仍在寻找比较参考的方法。 –
你是如何得出这个结论的? –
您可以使用Object.ReferenceEquals或(object)s1 ==(object)s2。 –
我认为这不是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。这意味着在这种情况下它匹配的值。
不知道如何评论ReferenceEquals的行为回答这个问题......一些澄清可能有帮助(以及解释什么确切的问题,你试图回答)。 –
对不起,我不确定他是否想要使用字符串或字符串。在第一种情况下,我走出轨道。 – Romeo
我不认为我可以使用字符串,因为我实际上使用TextBox对象并检索TextBox.Text,它是一个字符串。 –
去查找字符串实习。 –
非常不清楚你想达到什么。显然's1 = s2'实现了参考平等,但它听起来并不像你正在寻找的那样。另外,请确保展示您已经“不太好”的方式,并解释您希望代码更好的方式。 –
@AlexeiLevenkov我只是认为字符串是一个结构,字符串是一个对象。我的错。 –