首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在具有值类型约束的泛型声明类型之间进行复制

如何在具有值类型约束的泛型声明类型之间进行复制
EN

Stack Overflow用户
提问于 2009-02-26 23:09:04
回答 5查看 688关注 0票数 1

我有一个泛型方法,可以在值类型之间复制值。即使使用struct约束,下列方法也会导致设计时错误。知道如何在值之间进行复制或转换吗?

代码语言:javascript
复制
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;
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-26 23:37:24

假设你正在尝试转换的类型有一个注册的类型转换器,那么一个小小的反射魔法就可以做到这一点:

代码语言:javascript
复制
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

票数 3
EN

Stack Overflow用户

发布于 2009-02-26 23:16:18

//错误:无法将类型'Tsrc‘转换为'Ttgt’

除非有可访问的转换运算符,否则不能在任意类型之间进行转换。

票数 1
EN

Stack Overflow用户

发布于 2009-02-26 23:16:40

这两者被定义为不同的类型。尽管它们都是结构,但它们不是相同的类型。

将souce和target定义为同一类型:

代码语言:javascript
复制
private T MyMethod<T>(T source, T target)
{
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/592864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档