在枚举成员上实现流畅扩展的最佳方法

时间:2012-10-08 08:37:48

标签: c# methods enums fluent

让我们说我得到了与枚举有关的扩展,然后只返回它。

public static T Do<T>(this Enum e) where T : struct
{
    // Do something.
    return // e? .. (T)e? .. or (T)(object)e? ;
}

那么我该返回什么才能让我的代码成功构建并使用此示例运行:

Roles role = Roles.Admin | Roles.Moderator;
role.Do<Roles>().SomethingElse().AndMore<Roles>().Etc<int>();

__

return (T)e;

http://pasteboard.s3.amazonaws.com/images/1349685696025173.png

__

return e;

http://pasteboard.s3.amazonaws.com/images/1349685753912110.png

__

return (T)(object)e;

实际上有效,但拳击然后拆箱。

3 个答案:

答案 0 :(得分:1)

    public static T Do<T>(this Enum e) where T : struct
    {
        return (T) Convert.ChangeType(e, typeof(T));
    }

答案 1 :(得分:1)

这是一个棘手的问题,因为您无法在通用上放置枚举约束。

请查看本文以获取更多信息,以及可能的解决方法:

http://msmvps.com/blogs/jon_skeet/archive/2009/09/10/generic-constraints-for-enums-and-delegates.aspx

答案 2 :(得分:0)

你必须遵守Closure的数学结构 维基百科很好地解释了这一点:Closrue

简短句子:
在您的情况下,您必须返回下一个函数作为输入参数显示的内容。