Yve*_*ves 7 .net c# enums static
我想知道为什么我们不能在枚举中添加静态方法(只有方法,而不是属性)?那有什么解释吗?
如果允许它将非常有用.
我也想了解谁禁止我们这样做?是IL还是C#?
编辑:
我不想使用扩展方法.因为我不需要传递该枚举的实例.我不需要它的价值......
我想打电话给不喜欢的FooTypes.GetGoodFoos()东西FooTypes.BadFoo.GetSomething()
编辑2:
只有我认为这可能更有用而不是在另一个类中编写这个方法吗?
public enum Colors
{
Red,
LightRed,
Pink,
/* .
.
. */
Green
public static Colors[] GetRedLikes()
{
return new Colors[]
{
Colors.Red,
Colors.LightRed,
Colors.Pink
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在相同情况下使用静态类:
public enum SomeEnum
{
Item1,
Item2,
Item3
}
public static class SomeEnumHelper
{
public static SomeEnum[] GetMainItems()
{
return new[] {SomeEnum.Item1, SomeEnum.Item2};
}
}
Run Code Online (Sandbox Code Playgroud)
正如其他答案所说,这是不可能的。
我知道,这不能回答您的问题,但是我想为您的示例提供替代方法。因为,基本上,您尝试归档的内容都已经可以通过标志实现。因此,让我以您的“ GetRedLikes”示例为例:
[Flags]
public enum Colors : byte
{
Transparent = 0, // = 0 (00000000)
Red = 1 << 0, // = 1 (00000001)
LightRed = 1 << 1, // = 2 (00000010)
Pink = 1 << 2, // = 4 (00000100)
Green = 1 << 3, // = 8 (00001000)
RedLikes = Colors.Red | Colors.LightRed | Colors.Pink // = 7 (00000111)
}
Run Code Online (Sandbox Code Playgroud)
然后Colors.RedLikes将包含Red,LightRed和Pink。与往常一样,所有的魔术都是由一点点完成的。
当然,此解决方案将不允许您执行非常复杂的算法,这不是方法类型的替代。但是,它允许您将多个枚举组合在一起。如果需要其他功能,则必须在额外的类中构建一个方法。
我们无法添加方法,因为这就是语言的制作方式,您可以自由阅读C# 语言规范enums的规范
14.3 枚举成员
枚举类型声明的主体定义零个或多个枚举成员,它们是枚举类型的命名常量。两个枚举成员不能具有相同的名称。
枚举成员声明: 枚举成员声明 枚举成员声明 、 枚举成员声明 枚举成员声明: attributeopt 标识符 attributeopt
标识符 = 常量表达式每个枚举成员都有一个关联的常量值。该值的类型是包含枚举的基础类型。每个枚举成员的常量值必须在枚举的基础类型的范围内。