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

本文关键字:位置 内存 保留 对象 替换 | 更新日期: 2023-09-27 17:58:02

假设我有一个列表:

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;

谢谢!

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

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

您可以使用一个委托/匿名lambda来获取list[0]:

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

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

您真正想要做的是覆盖赋值运算符,但这在C#中是不可能的。最接近的方法是创建一个行为有点像Nullable<T>的类,上面有.Value属性,并将其赋值给.Value特性,而不是覆盖列表中的对象本身。

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

不安全指针是一种可能性:http://msdn.microsoft.com/en-us/library/y31yhkeb(v=vs.80).aspx

对于"安全"代码,可以将值存储在长度为1的数组中,然后只存储对该数组的引用,并始终通过array[0]访问该值,但这有点麻烦,可能有更好的方法可以实现您想要实现的目标。