2011-11-22 109 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

是的,这是可能的,理由删除你的方法的第二个参数(这是完全没用的),它会工作(我测试了代码)!

相关问题