2

我想要一些在 C# 中硬编码信息的方法,如下所示:

1423, General 
5298, Chiro 
2093, Physio 
9685, Dental 
3029, Optics

然后,我想将这些数据引用如下:

"The description for category 1423 is " & MyData.GetDescription[1423] 
"The id number for General is " & MyData.GetIdNumber("General")

在 C# 中执行此操作的最佳方法是什么?

4

2 回答 2

6

那么你可以使用Tuple<int, string>- 但我建议创建一个类来存储这两个值:

public sealed class Category
{
    private readonly int id;
    public int Id { get { return id; } }

    private readonly string description;
    public string Description { get { return description; } }

    public Category(int id, string description)
    {
        this.id = id;
        this.description = description;
    }

    // Possibly override Equals etc
}

然后出于查找目的,您可以有一个Dictionary<string, Category>用于描述查找和一个Dictionary<int, Category>用于 ID 查找 - 或者如果您确信类别的数量会保持较小,您可以只使用List<Category>.

Tuple与仅使用 a或简单Dictionary<string, int>and相比,为此使用命名类型的好处Dictionary<int, string>是:

  • 你有一个可以传递的具体类型,在你的数据模型中使用等
  • 您最终不会将 aCategory与任何其他在逻辑上只是 anint和 a 的数据类型混淆string
  • Id使用和Description属性时,您的代码将比使用Item1Item2from更清晰易读Tuple<,>
  • 如果您稍后需要添加另一个属性,则更改很小。
于 2013-05-01T07:49:57.590 回答
3

您可以使用Dictionary<TKey, TValue>

var items = new Dictionary<int, string>();
items.Add(1423, "General");
...

var valueOf1423 = items[1423];
var keyOfGeneral = items.FirstOrDefault(x => x.Value == "General").Key;

如果没有值为“General”的项目,上面的示例将引发异常。为了防止这种情况,您可以将 Dictionary 包装在自定义类中并检查条目是否存在并返回您需要的任何内容。

请注意,该值不是唯一的,字典允许您使用不同的键存储相同的值。

包装类可能看起来像这样:

public class Category {
    private Dictionary<int, string> items = new Dictionary<int,, string>();

    public void Add(int id, string description) {
        if (GetId(description <> -1)) {
            // Entry with description already exists. 
            // Handle accordingly to enforce uniqueness if required.
        } else {
            items.Add(id, description);
        }
    }

    public string GetDescription(int id) {
        return items[id];
    }

    public int GetId(string description) {
        var entry = items.FirstOrDefault(x => x.Value == description);
        if (entry == null) 
            return -1;
        else
            return entry.Key;
    }
}
于 2013-05-01T07:53:26.557 回答