替换对象但在c#中保留以前的内存位置

时间:2011-06-01 06:09:29

标签: 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;

谢谢!

5 个答案:

答案 0 :(得分:1)

在我看来这是不可能的。您需要一个额外的间接级别,您必须自己实现。

答案 1 :(得分:1)

您可以使用提取列表[0]的委托/匿名lambda:

        Func<object> foo = () => list[0];

当然,这会稍微改变语法,因为它现在是foo()而不是foo,但它的效果是您可以在以后的任何时间获取list [0]的值,它总是得到当前价值。

您真正希望能够做的是 覆盖赋值运算符 ,但这在C#中是不可能的。你得到的最接近的是创建一个类似于Nullable<T>的类,其上有一个.Value属性,并分配给该.Value属性,而不是覆盖列表中的对象本身。

答案 2 :(得分:0)

您可以使用fixed关键字,但仅限于不安全的代码。但我不确定你试图做什么,如果你需要这种控制水平,它可能无法满足你的需求c ++ cli将是一个更好的选择。

答案 3 :(得分:0)

答案 4 :(得分:0)

对于“安全”代码,您可以执行诸如将值存储在长度为1的数组中,然后仅存储对数组的引用并始终通过array[0]访问该值的操作,但这有点像黑客并且可能有更好的方法来完成你想要完成的任务。