首页 > C#的反射问题

C#的反射问题

我有个A类有字段:a1,a2,a3,我现在想利用反射把A类字段映射到B类:b1,b2,b3,这该怎么做?


不考虑性能,最简单的关键代码

      var b = new B();
      var fieldA = a.GetType().GetField("字段名");//a 为 A 的实例
      var fieldB = a.GetType().GetField("字段名");
      fieldB.SetValue(b,fieldA.GetValue(a));

如果你已知这些字段的名字,可以如下面的代码这么做:

class Program
    {
        static void Main(string[] args)
        {
            A a = new A();
            var fieldA = a.GetType().GetField("a1", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
            B b = new B();
            var fieldB = b.GetType().GetField("b1", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
            fieldB.SetValue(b, fieldA.GetValue(a), System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic, null, CultureInfo.CurrentCulture);

            Console.WriteLine(b);
        }
    }

    public class A
    {
        private string a1;

        public A()
        {
            a1 = "1";
        }
    }

    public class B
    {
        private string b1;
    }

输出结果B.b1是等于1的。

如果不知道字段的名字,可以把所有字段都拿到,再做处理。下面的代码可以拿到所有字段。

var fields = a.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);

这是最简单直接的办法,希望可以帮助你。

【热门文章】
【热门文章】