2017-07-25 68 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,它是一個字符串。 –

相關問題