C# 4.0 返回父类型的扩展
我知道我可以通过泛型实现这一点,如下所示,但是我如何构建一个扩展来使用泛型返回父类型呢 通用扩展签名:C# 4.0 返回父类型的扩展,c#-4.0,extension-methods,C# 4.0,Extension Methods,我知道我可以通过泛型实现这一点,如下所示,但是我如何构建一个扩展来使用泛型返回父类型呢 通用扩展签名: public static TEnum FromString<TEnum>(this Enum par , string val ) where TEnum : Enum { return (TEnum) Enum.Parse(par.GetType(), val); } 基本上,我有一系列枚举,它们的值被解析为一个进程的字符串,作为接收者,我需要将该字符串值解析为枚举进
public static TEnum FromString<TEnum>(this Enum par , string val ) where TEnum : Enum {
return (TEnum) Enum.Parse(par.GetType(), val);
}
基本上,我有一系列枚举,它们的值被解析为一个进程的字符串,作为接收者,我需要将该字符串值解析为枚举进行验证。最后,如果字符串
值不是枚举数中的有效值,它将返回null或默认值
。事实上,我需要能够返回源
枚举器的类型,而无需执行泛型操作
如果不可能,那就是kewl,我想我会尝试在没有泛型的情况下使用扩展逻辑模式来实现它。简单的答案是否定的,您需要泛型来返回正确的枚举类型。
否则,您将只使用基本的
Enum
类型,而不是枚举的特定类型
您可以创建如下扩展方法:
public static Enum FromString(this Enum par, string val)
{
return (Enum) Enum.Parse(par.GetType(), val);
}
但正如您所看到的,您将得到一种“Enum”,而不是您的特定Enum。另一方面:
Enum val = default(MyEnum).FromString("SomeEnumValue");
bool isEnum = val is MyEnum; // Returns True
正如您所看到的,val
属于MyEnum
类型,isEnum返回true
这也适用于:
MyEnum val = (MyEnum)default(MyEnum).FromString("SomeEnumValue");
简短的回答是否,您需要泛型返回正确的枚举类型。
否则,您将只使用基本的
Enum
类型,而不是枚举的特定类型
您可以创建如下扩展方法:
public static Enum FromString(this Enum par, string val)
{
return (Enum) Enum.Parse(par.GetType(), val);
}
但正如您所看到的,您将得到一种“Enum”,而不是您的特定Enum。另一方面:
Enum val = default(MyEnum).FromString("SomeEnumValue");
bool isEnum = val is MyEnum; // Returns True
正如您所看到的,val
属于MyEnum
类型,isEnum返回true
这也适用于:
MyEnum val = (MyEnum)default(MyEnum).FromString("SomeEnumValue");
你不想用泛型做这件事有什么原因吗?已经把它作为泛型做了,只是想知道是否有可能用扩展作为泛型的一个副作用。你不想用泛型做这件事有什么原因吗?已经把它作为泛型做了,只是想知道是否有可能将扩展作为泛型的一个副作用。太糟糕了,我无法创建泛型,然后在枚举中扩展该泛型。TY用于开箱即用示例。太糟糕了,我无法创建泛型,然后在枚举中扩展该泛型。TY用于开箱即用的示例。