http://www.dreamincode.net/forums/user/335389-sergio-tapia/
我是帮手小组,目前还有其他小组。我想将所有可能的组写入C#类或其他东西,然后在将来创建其他组时,我只需修改“组的集合”。
我的问题是,我应该为这个用例使用什么C#结构?
编辑:为了清晰起见,更改了问题和部分正文。
答案 0 :(得分:1)
更改枚举非常充实,但可以在有限的范围内完成。考虑:
public enum SomeColors
{
Black,
blue,
red
}
如果我们这样做,编译为使用SomeColors.blue
的另一个程序集中的代码将会中断:
public enum SomeColors
{
Black,
Green,
blue,
red
}
因为它会将值1
编入其中,现在SomeColors.Green
的值为SomeColors.blue
,2
现在为public enum SomeColors
{
Black,
Blue,
Red
}
。
另外,如果我们要将第一个更改为具有相同的大小写:
SomeColors.Blue
然后运行代码仍然有效,但重新编译会产生编译器错误,因为Enum.Parse
不起作用。此外,public enum SomeColors
{
Black,
blue,
red,
green
}
将(在这种情况下,取决于区分大小写设置)工作,具体取决于正在运行的代码可用的SomeColors版本。
但是,添加值不是一个重大变化。如果我们采取第一个并将其更改为:
green
然后所有现有代码都可以,但当然不知道Enum.Parse
,除非找到Enum.Parse
。
所以,如果你只想添加,如果你可以依赖于没有人试图const
来自更新版本的字符串,那么它就可以了。
public static class SomeColors
{
public static readonly int Black = 0;
public static readonly int Blue = 1;
public static readonly int Red = 2;
}
值也是如此。
如果您需要使用版本更改值,则应使用:
{{1}}
由于这些不是常量,而是静态分配的字段,因此它们将从类中使用而不是编译,并且对类的更改将更改使用的内容。在某些情况下,通过使它们成为属性而不是字段,可以进一步提高安全性最值得注意的是,如果您可能希望将来计算出属性,那么如果它们当前是字段则会发生重大变化,但如果它们已经是属性则不会。但
如果你想让这些值在运行时是动态的,那么你需要一个带有索引器的类,它接受一个字符串并返回一个整数。