自定义类型转换(具有完全相同成员)

// 定义两个具有完全相同成员的类
class A
{
    public String S = "A";
    public int Val = 1;
    private double DVal = 10.1;
}
 
class B
{
    public String S = "B";
    public int Val = 2;
    private double DVal = 20.1;
}
 
static class Program
{
    [STAThread]
    static void Main( params string[] args )
    {
        A a = new A();
        B b = CopySameFieldsObject< B >( a );   // 把A的对象转换到B对象
 
        B b2 = new B();
        A a2 = CopySameFieldsObject< A >( b2 );   // 反过来测试下
    }
 
    // 假定输入类于与返回类具有完全相同的字段
    static T CopySameFieldsObject< T >( Object source )
    {
        Type _SrcT = source.GetType();
        Type _DestT = typeof( T );
 
        // 构造一个要转换对象实例
        Object _Instance = _DestT.InvokeMember( "", BindingFlags.CreateInstance, null, null, null );
 
        // 这里指定搜索所有公开和非公开的字段
        FieldInfo[] _SrcFields = _SrcT.GetFields( BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance );
 
        // 将源头对象的每个字段的值分别赋值到转换对象里,因为假定字段都一样,这里就不做容错处理了
        foreach( FieldInfo field in _SrcFields )
        {
            _DestT.GetField( field.Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance ).
                SetValue( _Instance, field.GetValue( source ) );
        }
 
        return ( T )_Instance;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值