[英]Can you get type specific behavior from generics in c#?
我認為應該很清楚我想要做什么 - 獲得int
和string
的顯式特化,而在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或一個單一類型的字符串,但您必須在運行時檢查以確定實際返回的是哪一個:
遺憾的是,這個概念目前還沒有以可以有效實施的方式存在,需要一些尚未添加的語言支持。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.