有没有一种方法可以更改参考值,以便所有参考都可以更新?

时间:2019-12-03 20:28:51

标签: c# reference

我想声明局部变量,将它们添加到列表中,然后传递给更改该列表元素引用的对象的方法。

但是我需要原始变量来反映那些更改,而它们并不需要。

那有可能吗?非常感谢

class TestObject
{
    public int test;

    static TestObject test3 = new TestObject { test = 3 };
    static TestObject test4 = new TestObject { test = 4 };

    public static void Test()
    {
        TestObject test1 = new TestObject { test = 1 };
        TestObject test2 = new TestObject { test = 2 };

        List<TestObject> list = new List<TestObject>() { test1, test2 };

        Test2(list); // list[0] = 3 and list[1] = 4, but test1 still = 1 and test2 = 2
    }

    public static void Test2(List<TestObject> list)
    {
        list[0] = test3;
        list[1] = test4;
    }
}

1 个答案:

答案 0 :(得分:1)

正如人们在对问题的评论中指出的那样,如果列表中的引用被更改,您可能不需要重新分配引用-可能会为您的问题提供更好的解决方案。但是,如果您确实知道这是要走的路-您需要完全替换列表中的对象并在其他位置反映这些更改,则可以使用简单的代理并传递代理列表而不是您的代理列表对象。

1, 2

这样,您可以创建代理列表:

public class Proxy<T>
{
    public Proxy(T obj)
    {
        this.Reference = obj;
    }

    public T Reference { get; set; }
}

然后您可以根据需要重新分配值:

var test1 = new Proxy<TestObject>(new TestObject { test = 1 });
var test2 = new Proxy<TestObject>(new TestObject { test = 2 });

var list = new List<Proxy<TestObject>>() { test1, test2 };

现在,方法返回后,public static void Test2(List<Proxy<TestObject>> list) { list[0].Reference = test3; list[1].Reference = test4; } test1将(间接)引用新对象。

话虽如此,我想我认为它既麻烦又hacky-我宁愿更改实际对象,也不愿引用它们(代理就是这样做的)。