我有一个通用方法可以在值类型之间复制值。即使采用结构约束,以下方法也会产生设计时间错误。知道如何在值之间复制或转换吗?

private Ttgt MyMethod<Tsrc,Ttgt>(Tsrc SourceObject)
    where Tsrc : struct
    where Ttgt : struct
{
    //Error:cannot implictly convert type 'Tsrc' to 'Ttgt'
    Ttgt returnObject = SourceObject;

    //Error:Cannot convert type 'Tsrc' to 'Ttgt'
    Ttgt returnObject = (Ttgt)SourceObject;

    return returnObject;
}

最佳答案

假设有一个已注册的类型转换器,可以在一些反射魔术之间转换您想要的类型:

private Ttgt MyMethod<Tsrc,Ttgt>(Tsrc sourceObject)
    where Tsrc:struct where  Ttgt:struct
{
    Type targetType = typeof(Ttgt);
    TypeConverter tc = TypeDescriptor.GetConverter(targetType);
    Ttgt returnObject = (Ttgt)tc.ConvertTo(sourceObject, targetType);
    return returnObject;
}


但是开箱即用的用途非常有限,因为例如在bool和int之间没有转换器。您要解决什么问题?

我还发现了另一个question,其中包含一些疯狂的转换代码。

编辑:
您的评论清楚地表明,您正在尝试在域对象和某种视图/合同模型之间执行对象到对象的映射。你看过AutoMapper了吗?

09-30 21:41