繁体   English   中英

从通用转换为通用

[英]Cast from generic to generic

简而言之,我试图使此代码正常工作:

class it<X>
{
    X[] data;
    int pos;

    public Y get<Y>()
    {
        return (Y) data[pos];
    }
}

基本上,我有许多不同图元的数组,需要将它们作为不同的图元处理到另一个地方。 以前的代码无法编译,因为编译器不知道X和Y是什么。 但是,执行以下操作:

    public Y get<Y>()
    {
        return (Y) (object) data[pos];
    }

但是,然后我得到运行时异常,例如:

InvalidCastException: Cannot cast from source type to destination type.
it[System.Double].get[Single]()

这似乎很愚蠢,因为C#显然在浮点数和双精度数(以及其他基元)之间进行了强制转换。 我猜想它与拳击等有关,但是我对C#还是很陌生,所以我真的不知道-我猜我已经习惯了C ++模板。 请注意,X和Y之间始终存在转换-我可以某种方式告诉编译器吗?

您可以使用ConvertChangeType方法:

public Y get<Y>()
{
    return (Y)Convert.ChangeType(data[pos], typeof(Y));
}

向您的类和方法添加一些通用约束以确保仅可以传递原语也是一个好主意:

class it<X> where X : struct

public Y get<Y>() where Y : struct

暂无
暂无

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

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