首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >枚举扩展方法

枚举扩展方法
EN

Stack Overflow用户
提问于 2008-11-09 22:31:23
回答 7查看 48.8K关注 0票数 54

在vs2008中,可以编写一个扩展方法来应用于任何枚举。

我知道您可以针对特定的枚举编写扩展方法,但我希望能够使用单个扩展方法对每个枚举进行扩展。这个是可能的吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2008-11-09 22:34:02

可以,只需针对基本Enum类型进行编码,例如

代码语言:javascript
运行
复制
public static void Something(this Enum e)
{
    // code here
}

缺点是你最终可能会做一些非常糟糕的事情,比如使用Enum.GetUnderlyingType找到真正的基类型,强制转换,以及根据枚举的基类型向下进行不同的分支,但你可以找到它的一些很好的用法(例如,我们有适用于所有枚举的IsOneOfIsCombinationOf方法)。

PS:请记住,在编写方法时,尽管不太明智,但您可以使用floatdouble作为枚举的基类型,因此对于这些类型和无符号值,您需要一些特殊情况。

票数 81
EN

Stack Overflow用户

发布于 2008-11-09 22:40:46

可以,停那儿吧。目标扩展类型为Enum类型。在C#中,这将按如下方式完成:

代码语言:javascript
运行
复制
public static void EnumExtension(this Enum e)
{
}

或者像这样在VB中:

代码语言:javascript
运行
复制
<Extension()> _
Public Sub EnumExtension(ByVal s As Enum)
End Sub
票数 18
EN

Stack Overflow用户

发布于 2009-06-18 00:01:57

仅供参考,这里是我已经能够使用的Enum扩展方法的一个很好的例子。它为枚举实现了一个不区分大小写的TryParse()函数:

代码语言:javascript
运行
复制
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;
        }
    }
}

您可以通过以下方式使用它:

代码语言:javascript
运行
复制
public enum TestEnum
{
    A,
    B,
    C
}

public void TestMethod(string StringOfEnum)
{
    TestEnum myEnum;
    myEnum.TryParse(StringOfEnum, out myEnum);
}

以下是我访问过的两个站点,它们帮助编写了以下代码:

Case Insensitive TryParse for Enums

Extension methods for Enums

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/276585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档