让我们说我得到了与枚举有关的扩展,然后只返回它。
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;
实际上有效,但拳击然后拆箱。
答案 0 :(得分:1)
public static T Do<T>(this Enum e) where T : struct
{
return (T) Convert.ChangeType(e, typeof(T));
}
答案 1 :(得分:1)
这是一个棘手的问题,因为您无法在通用上放置枚举约束。
请查看本文以获取更多信息,以及可能的解决方法:
答案 2 :(得分:0)
你必须遵守Closure的数学结构 维基百科很好地解释了这一点:Closrue
简短句子:
在您的情况下,您必须返回下一个函数作为输入参数显示的内容。