Exemplo n.º 1
0
    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));
            }
        }
    }
Exemplo n.º 2
0
    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));
        }
    }