在我的应用程序中,我有一些信息可以是一小组值之一 - 所以我想使用枚举来保存它,在编译时通过类型安全确保有效值:
public enum Something { A1, A2, A3, B1, B2, C1 };
这些枚举代表多维数据(它们在上面的示例中有字母和数字),所以我希望能够获得与它们相关的值,例如
Something example = Something.A1;
// Now I want to be able to query the values for example:
example.Letter; // I want to get "A"
example.Number; // "1"I want to get 1
我有两种可能的解决方案,他们都不觉得非常'干净',所以我对哪些人更喜欢,为什么,或者是否有人有更好的想法感兴趣。
选项1: 创建一个包装枚举的结构,并提供包装数据的属性,例如
public struct SomethingWrapper
{
public Something Value { get; private set; }
public SomethingWrapper(Something val)
{
Value = val;
}
public string Letter
{
get
{
// switch on Value...
}
}
public int Number
{
get
{
// switch on Value...
}
}
}
选项2: 保持枚举原样并创建一个静态Helper类,它提供了获取值的静态函数:
public static class SomethingHelper
{
public static string Letter(Something val)
{
// switch on val parameter
}
public static int Number(Something val)
{
// switch on val parameter
}
}
我应该选择哪个,为什么?还是有一个我没想过的更好的解决方案?
答案 0 :(得分:4)
第三个选项:与第二个选项类似,但使用扩展方法:
public static class SomethingHelper
{
public static string Letter(this Something val)
{
// switch on val parameter
}
public static int Number(this Something val)
{
// switch on val parameter
}
}
然后你可以这样做:
Something x = ...;
string letter = x.Letter();
遗憾的是,没有扩展属性,但这就是生命。
或者,创建自己的伪枚举:类似这样的东西:
public sealed class Something
{
public static Something A1 = new Something("A", 1);
public static Something A2 = ...;
private Something(string letter, int number)
{
Letter = letter;
Number = number;
}
public string Letter { get; private set; }
public int Number { get; private set; }
}
答案 1 :(得分:0)
为什么不使用两个枚举,也许定义一个包含每个枚举的结构?