Making a value type behave as a reference type using Expression>

后端 未结 3 1715
失恋的感觉
失恋的感觉 2021-01-21 02:41

We know that int is a value type and so the following makes sense:

int x = 3;
int y = x;
y = 5;
Console.WriteLine(x); //says 3. 

Now, here is a

3条回答
  •  情书的邮戳
    2021-01-21 03:10

    You can do something like this:

    public delegate void Setter(T newValue);
    public delegate T Getter();
    public class MagicPointer
    {
        private Getter getter;
        private Setter setter;
    
        public T Value
        {
            get
            {
                return getter();
            }
            set
            {
                setter(value);
            }
        }
    
        public MagicPointer(Getter getter, Setter setter)
        {
            this.getter = getter;
            this.setter = setter;
        }
    
    }
    

    usage:

    int foo = 3;
    var pointer = new MagicPointer(() => foo, x => foo = x);
    pointer.Value++;
    //now foo is 4
    

    Of course this solution doesn't guarantee a strong compile time control, because is up to the coder to write a good getter or setter.

    Probably, if you need something like a pointer you should reconsider your design, because likely you can do it in another way in C# :)

提交回复
热议问题