结束于this StackOverflow question ,我发现这个非常好的辅助方法用于将字符串解析为通用枚举值:
public static T ParseEnum<T>(string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}
我想将其从辅助方法更改为扩展方法,但我不太熟悉使用泛型,所以我不确定这是否/如何工作。
我尝试过这个,但是您很快就会看到这段代码实际上并没有编译:
public static T ParseEnum(this T myEnum, string value)
{
return (T) Enum.Parse(typeof(myEnum), value, true);
}
我也尝试过这个,但这也不起作用:
public static Enum ParseEnum(this Enum myEnum, string value)
{
return Enum.Parse(typeof(myEnum), value, true);
}
是否可以做我在这里问的事情?
最佳答案
编写扩展方法时,您需要做的第一件事就是弄清楚要如何调用它。 IE。 您要扩展什么?
在解析 string
并返回 enum
值的情况下,唯一真正有意义的是扩展 string
类。从这个角度来看,扩展方法如下所示:
public static T ParseEnum<T>(this string text)
{
return (T)Enum.Parse(typeof(T), text);
}
你可以这样调用它:
Pets pet = "Cat".ParseEnum<Pets>();
另一种替代方法使用类型推断,但代价是引用参数(我更愿意避免):
public static void ParseEnum<T>(this string text, out T t)
{
t = (T)Enum.Parse(typeof(T), text);
}
你可以这样调用它:
Pets pet;
"Cat".ParseEnum(out pet);
恕我直言,即使您获得类型推断,这也不是那么好,因为您不能在表达式中使用方法调用。
请注意,语法 Pets.ParseEnum("Cat")
不起作用,因为 Pets
是类型名称,而不是类型实例,您可以仅基于对象的实例进行扩展。但也许上面的例子已经足够接近了(无论如何,输入的字符数大约相同:))
关于c# - 是否可以为泛型 Enum 类型编写扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28488994/