我应该在c#中使用Enum类还是Lookup

时间:2013-06-19 21:17:20

标签: c# enums

这是我的最终目标:我希望能够根据程序中注册的任何整数输出工具名称。例如,如果程序找到整数1001,1002和1003,则程序会告诉用户已找到工具1,工具2和工具3。

我已经使用一个简单的枚举类来实现这一点,其中所有“工具”都被编号并且对应于正确的整数。我甚至可以输出枚举作为名称,虽然我想输出一个字符串,最好是一个可以轻松编辑的字符串,而不必过多地更改整个程序。就像我现在可以将其全部编程为工具1,工具3和工具7一样好,然后返回并在我实际知道我正在使用的工具时更改字符串。

我也已尝试将DescriptionAttribute与此枚举一起使用,但即使已经有几个问题的帮助,我也无法弄清楚如何通过整数查找枚举,然后输出描述枚举。我可以做任何一个,或者两个,但不是两个。

所以这让我想知道除了使用Enum类之外是否有更好的方法可以处理所有这些,我听说它在c#中没用。我只想知道有关如何使用枚举类或c#中的其他方法来实现此目的的任何建议。

如果我需要分享我已有的工作代码,请告诉我。谢谢!

3 个答案:

答案 0 :(得分:7)

我建议使用具有一些属性的工具类;

public class Tool
{
    public string Name { get; set; }
    public string Description { get; set; }
}

然后在处理这些内容的代码中,我会使用Dictionary<int, Tool>。然后,如果您想要工具1001的描述,您只需:

  Console.WriteLine(myTools[1001].Description);

当然你可以使用Dictionary<int, string>,但稍后你可能会发现你需要更多与该工具相关的数据,因此创建一个类更有意义。

答案 1 :(得分:1)

对于Dictionary

来说,这是一个很好的理由

示例:

var tools = new Dictionary<int, string>
{
    {1001, "Tool 1"},
    {1002, "Tool 2"},
    {1003, "Tool 3"},
};

string tool1Name = tools[1001];
//toolName == "Tool 1"

答案 2 :(得分:0)

枚举非常实用。他们有时间和地点,在你的例子中,你真的不应该使用它们。它们以强类型方式表示常量值,如果您将其标记为flags,则可用作public class ToolItem { public int Id { get; set; } public string Description { get; set; } public override ToString() { //...Your logic } }

根据您的情况,课程会有效。

List<T>

然后您可以使用Dictionary<TKey, TValue>。 {{1}}等等。持有对它们的引用并使用LINQ来处理集合。