2012-02-22 24 views
1

當我們使用key從Hashtable中獲取對象時,我們得到的是對象的引用,即如果我們改變了類的屬性,它會影響Hashtable中的對象嗎?C#從Hashtable中獲取對象或引用

+2

當你嘗試過什麼事? – dtb 2012-02-22 08:12:28

回答

2

這將取決於該對象是否是一個參考或值類型。例如:

public class Foo 
{ 
    public string Bar { get; set; } 
} 

public struct Baz 
{ 
    public string Bazinga { get; set; } 
} 

class Program 
{ 
    static void Main() 
    { 
     var hashtable1 = new Dictionary<string, Foo> 
     { 
      { "key1", new Foo { Bar = "old bar" } } 
     }; 
     var hashtable2 = new Dictionary<string, Baz> 
     { 
      { "key1", new Baz { Bazinga = "old bazinga" } } 
     }; 

     var foo = hashtable1["key1"]; 
     foo.Bar = "new bar"; 
     var bar = hashtable2["key1"]; 
     bar.Bazinga = "new bazinga"; 

     Console.WriteLine(hashtable1["key1"].Bar); 
     Console.WriteLine(hashtable2["key1"].Bazinga); 
    } 
} 

打印:

new bar 
old bazinga 
1

是的,如果您的對象是參考類型(class,而不是struct)。

下面是一些代碼,證明了這一點:

var ht = new Hashtable(); 
var o = new object(); 
ht["key"] = o; 
Console.WriteLine(object.ReferenceEquals(o, ht["key"])); // == true