【发布时间】:2012-02-22 08:10:51
【问题描述】:
当我们使用key从Hashtable中获取一个对象时,我们得到的对象是一个引用吗,即如果我们改变了类的属性会影响到Hashtable里面的对象吗?
【问题讨论】:
-
你尝试的时候发生了什么?
当我们使用key从Hashtable中获取一个对象时,我们得到的对象是一个引用吗,即如果我们改变了类的属性会影响到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
【讨论】: