1
當我們使用key從Hashtable中獲取對象時,我們得到的是對象的引用,即如果我們改變了類的屬性,它會影響Hashtable中的對象嗎?C#從Hashtable中獲取對象或引用
當我們使用key從Hashtable中獲取對象時,我們得到的是對象的引用,即如果我們改變了類的屬性,它會影響Hashtable中的對象嗎?C#從Hashtable中獲取對象或引用
這將取決於該對象是否是一個參考或值類型。例如:
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
是的,如果您的對象是參考類型(class
,而不是struct
)。
下面是一些代碼,證明了這一點:
var ht = new Hashtable();
var o = new object();
ht["key"] = o;
Console.WriteLine(object.ReferenceEquals(o, ht["key"])); // == true
當你嘗試過什麼事? – dtb 2012-02-22 08:12:28