1

我知道我可以通过泛型来做到这一点,如下所示,但是我如何构建扩展以使用泛型返回父类型?

通用扩展签名:
public static TEnum FromString<TEnum>(this Enum par , string val ) where TEnum : Enum {
    return (TEnum) Enum.Parse(par.GetType(), val);
}
签名风格,我知道它不会起作用,但有点像我在寻找的东西。
public static this FromString(this Enum par , string val ) {
    return Enum.Parse(par.GetType(), val);
}

基本上,我有一系列枚举,它们的值被解析为一个进程的字符串,作为接收者,我需要将该字符串值解析为枚举以进行验证。最终,如果该string值不是 Enumerator 中的有效值,它将返回 null 或default,值。事实上,我需要能够返回source枚举器的类型而不必做一个泛型。

如果它不可能,那就是kewl,只是想我会尝试在没有泛型的情况下做到这一点,并使用扩展逻辑模式来做到这一点。

4

1 回答 1

1

简短的回答是否定的,您需要泛型返回正确的枚举类型
否则,您将只有基本Enum类型,而不是枚举的特定类型。

可以做的是创建一个这样的扩展方法:

public static Enum FromString(this Enum par, string val)
{
    return (Enum) Enum.Parse(par.GetType(), val);    
}

但正如您所看到的,您将获得一种不是您特定枚举的“枚举”类型。
另一方面:

Enum val =  default(MyEnum).FromString("SomeEnumValue");
bool isEnum = val is MyEnum; // Returns True

如您所见val , is的类型MyEnum和 isEnum 返回true

这也有效:

MyEnum val = (MyEnum)default(MyEnum).FromString("SomeEnumValue"); 
于 2012-12-31T17:41:32.997 回答