【问题标题】:C# Get from Hashtable, get object or referenceC#从Hashtable中获取,获取对象或引用
【发布时间】:2012-02-22 08:10:51
【问题描述】:

当我们使用key从Hashtable中获取一个对象时,我们得到的对象是一个引用吗,即如果我们改变了类的属性会影响到Hashtable里面的对象吗?

【问题讨论】:

  • 你尝试的时候发生了什么?

标签: c# reference hashtable


【解决方案1】:

这取决于对象是引用类型还是值类型。示例:

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

【讨论】:

  • 这不是哈希表!
【解决方案2】:

是的,如果您的对象是引用类型(class,而不是 struct)。

这里有一些代码可以证明这一点:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    相关资源
    最近更新 更多