using System; public class Test { private class Wrap where T : struct { public T Value; public static implicit operator Wrap(T v) { return new Wrap { Value = v }; } public static implicit operator T(Wrap w) { return w.Value; } public override string ToString() { return Value.ToString(); } public override int GetHashCode() { return Value.GetHashCode(); } // TODO other delegating operators/overloads } private static void assign(ref int i) { i = 42; } public static void Main() { Wrap element = 7; var vars = new Wrap[] {1, 2, element, 3, 4}; Console.WriteLine(vars[2]); assign(ref vars[2].Value); Console.WriteLine(element); } }