在这个StackOverflow问题上,我发现了一个非常好的帮助程序方法,用于将字符串解析为通用Enum值:
public static T ParseEnum<T>(string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}
Run Code Online (Sandbox Code Playgroud)
我想将其从辅助方法更改为扩展方法,但我对使用泛型并不十分熟悉,因此不确定是否/如何使用泛型。
我尝试过此方法,但是您很快就会看到此代码实际上并未编译:
public static T ParseEnum(this T myEnum, string value)
{
return (T) Enum.Parse(typeof(myEnum), value, true);
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过这样做,但这也不起作用:
public static Enum ParseEnum(this Enum myEnum, string value)
{
return Enum.Parse(typeof(myEnum), value, true);
}
Run Code Online (Sandbox Code Playgroud)
甚至可以做我在这里问的事情吗?
在编写扩展方法时,您需要做的第一件事就是弄清楚如何调用它。即什么是你延长?
在解析a string并返回一个enum值的情况下,真正有意义的唯一事情就是扩展string该类。在该视图中,扩展方法将如下所示:
public static T ParseEnum<T>(this string text)
{
return (T)Enum.Parse(typeof(T), text);
}
Run Code Online (Sandbox Code Playgroud)
您可以这样称呼它:
Pets pet = "Cat".ParseEnum<Pets>();
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用类型推断,但要以按引用参数为代价(我希望避免):
public static void ParseEnum<T>(this string text, out T t)
{
t = (T)Enum.Parse(typeof(T), text);
}
Run Code Online (Sandbox Code Playgroud)
您会这样称呼:
Pets pet;
"Cat".ParseEnum(out pet);
Run Code Online (Sandbox Code Playgroud)
恕我直言,即使您得到类型推断,这也不是一件好事,因为您不能在表达式中使用方法调用。
请注意,语法Pets.ParseEnum("Cat")是行不通的,因为Pets它是类型名称,而不是类型实例,并且只能基于对象的实例进行扩展。但是上面的示例也许足够接近(无论如何键入的字符数都差不多:))
| 归档时间: |
|
| 查看次数: |
1315 次 |
| 最近记录: |