public interface SomeInterface { int Foo { get; set; } } public struct SomeStruct : SomeInterface { int x; public int Foo { get { return x; } set { x = value; } } } public class Test { public static void Fun (T t) where T : SomeInterface { if (++t.Foo != 1) throw new System.Exception ("not 1"); if (t.Foo != 1) throw new System.Exception ("didn't update 't'"); } public static void Main() { Fun (new SomeStruct ()); } }