簡體   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