假设我有一个清单:
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;
谢谢!
答案 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]
访问该值的操作,但这有点像黑客并且可能有更好的方法来完成你想要完成的任务。