C # Получить из Hashtable, получить объект или ссылку - PullRequest
1 голос
/ 22 февраля 2012

Когда мы получаем объект из Hashtable, используя ключ, является ли объект, который мы получаем ссылкой, то есть если мы изменим свойство класса, это повлияет на объект внутри Hashtable?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Это будет зависеть от того, является ли объект ссылкой или типом значения. Пример:

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 голос
/ 22 февраля 2012

Да, если ваш объект является ссылочным типом (class, а не struct).

Вот код, подтверждающий это:

var ht = new Hashtable();
var o = new object();
ht["key"] = o;
Console.WriteLine(object.ReferenceEquals(o, ht["key"])); // == true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...