替换对象,但将先前的存储位置保留在c#中

问题描述

| 假设我有一个列表:
List<object> list = new List();
list.Add(object1);
list.Add(object2);

object foo = list[0];
如何调用list来替换list [0],以便foo将自动指向新替换的对象? 我知道这行不会成功,因为foo会继续指向list [0]的旧值...
list[0] = object3;
谢谢!     

解决方法

        我认为这是不可能的。您需要实现自己的间接附加级别。     ,        您可以使用委托/匿名lambda获取列表[0]:
        Func<object> foo = () => list[0];
当然,这会稍微改变语法,因为它现在是
foo()
而不是
foo
,但是它的效果是您可以在以后的任何时间获取list [0]的值,并且总是获取当前值。 您真正想要做的是重写赋值运算符,但这在C#中是不可能的。最接近的是创建一个行为类似于create5 a的类,并在其上具有.Value属性,并将其分配给该.Value属性,而不是覆盖列表中的对象本身。     ,        您可以使用fixed关键字,但只能在不安全的代码中使用。但是我不确定您尝试执行的操作是什么,如果您需要这种级别的控制c ++ cli,它可能无法满足您的需求,这将是更好的选择。     ,        不安全的指针是一种可能:http://msdn.microsoft.com/zh-cn/library/y31yhkeb(v=vs.80).aspx     ,        对于\“ safe \”代码,您可以执行以下操作,例如将值存储在长度为1的数组中,然后仅存储对该数组的引用,并始终按ѭ6access访问该值,但这有点麻烦,而且还有可能是一种更好的方法来完成您想完成的任务。