0

可以说我得到了对枚举执行某些操作然后返回它的扩展。

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;

实际上有效,但先装箱然后拆箱。

4

3 回答 3

1
    public static T Do<T>(this Enum e) where T : struct
    {
        return (T) Convert.ChangeType(e, typeof(T));
    }
于 2012-10-08T08:48:15.473 回答
1

这是一个棘手的问题,因为您不能在泛型上放置 Enum 约束。

查看这篇文章了解更多信息,以及可能的解决方法:

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

于 2012-10-08T08:51:03.710 回答
0

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

简而言之:
在您的情况下,您必须返回下一个函数预期的输入参数。

于 2012-10-08T08:41:58.050 回答