2011-11-22 103 views
1

是否有可能做這樣的事情:使用類型參數作爲返回類型

public static T ToEnum<T>(this string s, Type T) 
{ 
    return (T)Enum.Parse(typeof(T), s); 
} 

或以其他方式,即,使用參數T作爲返回類型?

+1

不,但你可以證明你打算如何使用它? – user7116

+0

我只是在玩耍,然後想到這一點。這個例子就是一個懶惰的程序員的例子,他只是想要做'.ToEnum(MoodTypes)'作爲一個例子。 – Jake

+1

你不應該需要'typeof()'Type'對象。實際上,您可以直接從泛型參數獲取類型信息,而不需要傳遞任何常規參數。例如,通過調用''Foo「.ToEnum ()''你可以在不通過'typeof(SomeEnum)''的情況下獲得'SomeEnum.Foo'。 – BoltClock

回答

4

你可以做到這一點

public static class Extensions 
{ 
    public static T ToEnum<T>(this string s) where T : struct 
    { 
     return (T)Enum.Parse(typeof(T), s); 
    } 
} 

public enum TestEnum 
{ 
    None, 

    Special, 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var x = TestEnum.Special.ToString(); 
     var y = x.ToEnum<TestEnum>(); // y will be TestEnum.Special 
    } 
} 
+0

+1這就是爲什麼仿製藥被髮明的原因:) – BoltClock

+0

AH!我應該想到這一點! – Jake

+2

可能會將'T'限制爲'struct',不能專門做一個枚舉,但這可能會稍微好一點。 –

1

當然,你可以像這樣做:

public static T ToEnum<T>(this string s) 
{ 
    return (T)Enum.Parse(typeof(T), s); 
} 

然後調用它像這樣:

string s = "Red"; 
Color color = s.ToEnum<Color>(); 
1

是的,這是可能的,理由刪除你的方法的第二個參數(這是完全沒用的),它會工作(我測試了代碼)!

相關問題