繁体   English   中英

通用C#转换

[英]Generic c# casting

interface ISample
{
    int Id { get; set; }
}
public class MyClass : ISample
{
    public int Id
    {
       get;
       set;
    }
    public string Name { get; set; }
}

上面是一个实现接口ISample的类。 我使用泛型添加了以下方法,将给定类型的对象转换为另一种类型。

private TResult Sample<TSource, TResult>(TSource source)
            where TSource : TResult
{
   return (TResult)(source);
}

使用泛型,我如何实现与给定ISample对象相同的反向操作,我想将其转换回MyClass对象,其中ISample是TSource,TResult是MyClass,其中TResult实现TSource。

您只需要从

where TSource : TResult

where TResult : TSource

以可能看起来像的代码结束

private TResult ToInterface<TSource, TResult>(TSource source) where TSource : TResult
{
    return source;
}

private TResult FromInterface<TSource, TResult>(TSource source) where TResult : TSource
{
    return source as TResult;
}

请注意,如果'source'参数不是TResult类型或不继承自TResult,则FromInterface函数将引发InvalidCastException。


编辑:

请参阅Lajos Arpad的答案。

编译器不会事先知道您打算从TSource向下转换到TResult 您将需要将TSource实例转换为肯定是TResult的超类的object ,因此需要首先将TSourceobject

(TResult)((object)source)

编辑:

正如@ZdeněkJelínek的评论部分所指出的那样,Eric Lippert撰写了有关内容的博客文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM