我想声明局部变量,将它们添加到列表中,然后传递给更改该列表元素引用的对象的方法。
但是我需要原始变量来反映那些更改,而它们并不需要。
那有可能吗?非常感谢
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;
}
}
答案 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-我宁愿更改实际对象,也不愿引用它们(代理就是这样做的)。