在vs2008中,可以编写一个扩展方法来应用于任何枚举。
我知道您可以针对特定的枚举编写扩展方法,但我希望能够使用单个扩展方法对每个枚举进行扩展。这个是可能的吗?
发布于 2008-11-09 22:34:02
可以,只需针对基本Enum
类型进行编码,例如
public static void Something(this Enum e)
{
// code here
}
缺点是你最终可能会做一些非常糟糕的事情,比如使用Enum.GetUnderlyingType
找到真正的基类型,强制转换,以及根据枚举的基类型向下进行不同的分支,但你可以找到它的一些很好的用法(例如,我们有适用于所有枚举的IsOneOf
和IsCombinationOf
方法)。
PS:请记住,在编写方法时,尽管不太明智,但您可以使用float
和double
作为枚举的基类型,因此对于这些类型和无符号值,您需要一些特殊情况。
发布于 2008-11-09 22:40:46
可以,停那儿吧。目标扩展类型为Enum
类型。在C#中,这将按如下方式完成:
public static void EnumExtension(this Enum e)
{
}
或者像这样在VB中:
<Extension()> _
Public Sub EnumExtension(ByVal s As Enum)
End Sub
发布于 2009-06-18 00:01:57
仅供参考,这里是我已经能够使用的Enum扩展方法的一个很好的例子。它为枚举实现了一个不区分大小写的TryParse()函数:
public static class ExtensionMethods
{
public static bool TryParse<T>(this Enum theEnum, string strType,
out T result)
{
string strTypeFixed = strType.Replace(' ', '_');
if (Enum.IsDefined(typeof(T), strTypeFixed))
{
result = (T)Enum.Parse(typeof(T), strTypeFixed, true);
return true;
}
else
{
foreach (string value in Enum.GetNames(typeof(T)))
{
if (value.Equals(strTypeFixed,
StringComparison.OrdinalIgnoreCase))
{
result = (T)Enum.Parse(typeof(T), value);
return true;
}
}
result = default(T);
return false;
}
}
}
您可以通过以下方式使用它:
public enum TestEnum
{
A,
B,
C
}
public void TestMethod(string StringOfEnum)
{
TestEnum myEnum;
myEnum.TryParse(StringOfEnum, out myEnum);
}
以下是我访问过的两个站点,它们帮助编写了以下代码:
https://stackoverflow.com/questions/276585
复制相似问题