【C#】基类数据传递给派生类

一、问题

现有两个类,基类:

/// <summary>
/// 基类
/// </summary>
public class Model
{
    public int Id { get; set; }
    ...
}

派生类:

/// <summary>
/// 派生类
/// </summary>
public class ForkModel : Model
{
    public string ForkName { get; set; }
    ...
}

现在有个需求:将基类的数据传递给派生类,派生类中的ForkName再单独赋值。

在网上查找的方法比较简单粗暴:

var model = new Model(){};
model = GetModelData(); // 获取model数据

var forkModel = (ForkModel)model; // 强转
forkModel.ForkName = "Name";

但是,我这边测试都是报错的,报错内容是“无法将类型为Model的对象强制转换为类型ForkModel”。

二、解决方案

所以只能重新想办法,直接写个方法:

/// <summary>
/// 基类数据传给派生类
/// </summary>
/// <param name="destination">目的地(派生类)</param>
/// <param name="source">源(基类)</param>
public void AssignFrom(object destination, object source)
{
    var destType = destination.GetType();
    var sourceType = source.GetType();

    var matchingProps = from d in destType.GetProperties()
                        join s in sourceType.GetProperties()
                            on d.Name equals s.Name
                        select new
                        {
                            source = s,
                            destination = d
                        };

    foreach (var prop in matchingProps)
    {
        prop.destination.SetValue(destination, prop.source.GetValue(source, null), null);
    }
}

然后直接使用方法即可:

var model = new Model(){};
model = GetModelData(); // 获取model数据

var forkModel = new ForkModel()
{
    ForkName = "Name"
}
AssignFrom(forkModel, model);

测试通过,完结撒盐!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值