簡體   English   中英

你能從c#中的泛型中獲得特定類型的行為嗎?

[英]Can you get type specific behavior from generics in c#?

我認為應該很清楚我想要做什么 - 獲得intstring的顯式特化,而在C ++中,這是顯而易見的專門化 - 是否有可能在C#中獲得相同的行為? 假設我有充分的理由這樣做,這是我程序中更廣泛的一個簡單的例子。

static class ReturnConstant<T>
{
    public static T FiveOrHello()
    {
        if(typeof(T) == typeof(int))
        {
            return 5;
        }
        else if (typeof(T) == typeof(string))
        {
            return "Hello!";
        }
        else
        {
            throw new NotImplementedException("OH NO");
        }
    }
}

編輯:

這是完全合法的c ++代碼:

template <typename T>
T giveConst();
template <>
int giveConst<int>() { return 5; }
template <>
std::string giveConst<std::string>() { return "Hello"; }

您的實現唯一的問題是C#編譯器無法驗證轉換為T的類型。

但你可以解決這個問題:

static class ReturnConstant<T>
{
    public static T FiveOrHello()
    {
        if (typeof(T) == typeof(int))
        {
            return (T)(object)5;
        }
        else if (typeof(T) == typeof(string))
        {
            return (T)(object)"Hello!";
        }
        else
        {
            throw new NotImplementedException("OH NO");
        }
    }
}

不,這是不可能的。 ReturnConstant<T>通用T表示ReturnConstant<int>ReturnConstant<string>是不同的類型。 而且你不能回歸不同的類型。

您可能感興趣的概念是一個受歧視的聯盟; 它將允許您返回一個int或一個單一類型的字符串,但您必須在運行時檢查以確定實際返回的是哪一個:

遺憾的是,這個概念目前還沒有以可以有效實施的方式存在,需要一些尚未添加的語言支持。

https://github.com/dotnet/csharplang/issues/113

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM