public static void TestStaticFields_Inner <T1, T2>(Type genTypeToUse, T1 srt1, T2 srt2) { { Type t = genTypeToUse.MakeGenericType(typeof(T1), typeof(T2)); TypeInfo ti = t.GetTypeInfo(); Func <int, object> ReadValue = (Func <int, object>)ti.GetDeclaredMethod("ReadStatic").CreateDelegate(typeof(Func <int, object>)); { FieldInfo fi_T = ti.GetDeclaredField("StaticFieldOfT"); fi_T.SetValue(null, srt1); Assert.AreEqual(srt1, ReadValue(0)); Assert.AreEqual(srt1, fi_T.GetValue(null)); FieldInfo fi_U = ti.GetDeclaredField("StaticFieldOfU"); fi_U.SetValue(null, srt2); Assert.AreEqual(srt2, ReadValue(4)); Assert.AreEqual(srt2, fi_U.GetValue(null)); } { FieldInfo fi = ti.GetDeclaredField("StaticFieldOfSomeGenericTypeU"); SomeGenericType <T2> srt = new SomeGenericType <T2> { _myTField = srt2 }; fi.SetValue(null, srt); Assert.AreEqual(srt, ReadValue(1)); Assert.AreEqual(srt, fi.GetValue(null)); } { FieldInfo fi = ti.GetDeclaredField("StaticIntField"); fi.SetValue(null, 42); Assert.AreEqual(42, (int)ReadValue(2)); Assert.AreEqual(42, (int)fi.GetValue(null)); } { FieldInfo fi = ti.GetDeclaredField("StaticStringField"); fi.SetValue(null, "hello"); Assert.AreEqual("hello", (string)ReadValue(3)); Assert.AreEqual("hello", (string)fi.GetValue(null)); } } }
public static void TestInstanceFields_Inner <T1, T2>(Type genTypeToUse, T1 srt1, T2 srt2, TypeInfo ti, object o) { Func <int, object> ReadValue = (Func <int, object>)ti.GetDeclaredMethod("ReadInstance").CreateDelegate(typeof(Func <int, object>), o); { FieldInfo fi_T = ti.GetDeclaredField("InstanceFieldOfT"); fi_T.SetValue(o, srt1); Assert.AreEqual((T1)srt1, ReadValue(0)); Assert.AreEqual((T1)srt1, fi_T.GetValue(o)); FieldInfo fi_U = ti.GetDeclaredField("InstanceFieldOfU"); fi_U.SetValue(o, srt2); Assert.AreEqual((T2)srt2, ReadValue(4)); Assert.AreEqual((T2)srt2, fi_U.GetValue(o)); } { FieldInfo fi = ti.GetDeclaredField("InstanceFieldOfSomeGenericTypeU"); SomeGenericType <T2> srt = new SomeGenericType <T2> { _myTField = srt2 }; fi.SetValue(o, srt); Assert.AreEqual(srt, ReadValue(1)); Assert.AreEqual(srt, fi.GetValue(o)); } { FieldInfo fi = ti.GetDeclaredField("InstanceIntField"); fi.SetValue(o, 42); Assert.AreEqual(42, (int)ReadValue(2)); Assert.AreEqual(42, (int)fi.GetValue(o)); } { FieldInfo fi = ti.GetDeclaredField("InstanceStringField"); fi.SetValue(o, "hello"); Assert.AreEqual("hello", (string)ReadValue(3)); Assert.AreEqual("hello", (string)fi.GetValue(o)); } }