我应该为这个用例使用什么C#集合?

时间:2010-10-11 00:19:56

标签: c# .net enums

http://www.dreamincode.net/forums/user/335389-sergio-tapia/

我是帮手小组,目前还有其他小组。我想将所有可能的组写入C#类或其他东西,然后在将来创建其他组时,我只需修改“组的集合”。

我的问题是,我应该为这个用例使用什么C#结构?

编辑:为了清晰起见,更改了问题和部分正文。

1 个答案:

答案 0 :(得分:1)

更改枚举非常充实,但可以在有限的范围内完成。考虑:

public enum SomeColors
{
  Black,
  blue,
  red
}

如果我们这样做,编译为使用SomeColors.blue的另一个程序集中的代码将会中断:

public enum SomeColors
{
  Black,
  Green,
  blue,
  red
}

因为它会将值1编入其中,现在SomeColors.Green的值为SomeColors.blue2现在为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}}

由于这些不是常量,而是静态分配的字段,因此它们将从类中使用而不是编译,并且对类的更改将更改使用的内容。在某些情况下,通过使它们成为属性而不是字段,可以进一步提高安全性最值得注意的是,如果您可能希望将来计算出属性,那么如果它们当前是字段则会发生重大变化,但如果它们已经是属性则不会。但

如果你想让这些值在运行时是动态的,那么你需要一个带有索引器的类,它接受一个字符串并返回一个整数。