我想設置一個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我只是認爲字符串是一個結構,字符串是一個對象。我的錯。 –