我有个A类有字段:a1,a2,a3,我现在想利用反射把A类字段映射到B类:b1,b2,b3,这该怎么做?
如果你已知这些字段的名字,可以如下面的代码这么做:
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);
这是最简单直接的办法,希望可以帮助你。
不考虑性能,最简单的关键代码