开发者

Replace object but keep previous memory location in c#

开发者 https://www.devze.com 2023-03-09 21:09 出处:网络
Let\'s say I have a list: List<object> list = new List(); list.Add(object1); list.Add(object2); object foo = list[0];

Let's say I have a list:

List<object> list = new List();
list.Add(object1);
list.Add(object2);

object foo = list[0];

How do I make a call to list to replace list[0] such that foo will automatically point to the newly replaced object?

I开发者_如何学C know this line won't do the trick as foo will continue pointing to the old value of list[0]...

list[0] = object3;

Thanks!


It's not possible in my opinion. You need an additonal level of indirection which you have to implement yourself.


You could use a delegate/ anonymous lambda that fetches list[0]:

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

Of course that changes the syntax slightly since it's now foo() instead of foo but it has the effect that you can fetch the value of list[0] at any time later and it always gets the current value.

What you really want to be able to do is to override the assignment operator but that's not possible in C#. The closest you'll get is to create a class that behaves a bit like Nullable<T> having a .Value property on it and assign to that .Value property instead of overwriting the object itself in the list.


You can use the fixed keyword but only in unsafe code. But i'm not sure what your attempting to do so it may not suite your needs if you need this level of control c++ cli would be a better choice.


Unsafe pointers are one possibility: http://msdn.microsoft.com/en-us/library/y31yhkeb(v=vs.80).aspx


For "safe" code, you can do something like store your value in an array of length 1, and then only store references to the array and always access the value by array[0], but this is a bit of a hack and there is probably a better way to do what you want to accomplish.

0

精彩评论

暂无评论...
验证码 换一张
取 消