3

我有一个工作示例Dictionary<string, int>。我需要将 a 设置Dictionary为 aprivate Dictionary并检查该值。

目前我有:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    Dictionary<string, int> docTypeValue = new Dictionary<string, int>();
    docTypeValue.Add("OSD", 1);
    docTypeValue.Add("POD", 2);
    docTypeValue.Add("REC", 3);
    docTypeValue.Add("CLAINF", 4);
    docTypeValue.Add("RATE", 5);
    docTypeValue.Add("OTHER", 6);
    docTypeValue.Add("CARINV", 7);
    docTypeValue.Add("PODDET", 8);
    docTypeValue.Add("BOLPO", 9);

    litText.Text = docTypeValue[txtDocType.Text].ToString();
}

这按预期工作。我需要使用房产吗?即下面

private Dictionary<string, int> DocTypeValue
{
    get;
    set; 
}

我如何重构上面的内容来创建建议的内容private Dictionary

4

5 回答 5

7

你正在寻找这样的东西。利用集合初始化器功能。

private Dictionary<string, int> docTypeValue = new Dictionary<string, int> 
{ 
    { "OSD", 1 },
    {"POD", 2},
    {"REC", 3},
    {"CLAINF", 4},
    //...
};
于 2013-10-08T15:31:43.190 回答
2

如果您不希望非成员能够修改字典的内容,但希望使其可用,则可以执行以下操作:

private Dictionary<String, Int32> dictionary = ...
public IEnumerable<Int32> Dictionary { get{ return dictionary.Values; } }

// Other methods in the class can still access the 'dictionary' (lowercase).
// But external users can only see 'Dictionary' (uppercase).
void AddItemToDictoinary(String key, Int32 value) {
    dictionary.Add(key, value);  // dictionary is accessible within the class.
}

或使用这样的索引器:

private Dictionary<String, Int32> dictionary = ...
public Int32 this[String key] { get { return dictionary[key]; } }

// Same as above - within the class you can still add items to the dictionary.
void AddItemToDictoinary(String key, Int32 value) {
    dictionary.Add(key, value);
}

使用索引器可以利用 BST 背后的优势Dictionary<T, U>(而不是使用顺序搜索)。因此,如果您的字典定义如下:

class SneakyDictionary { 
    private Dictionary<String, Int32> dictionary = ...
    public Int32 this[String key] { get { return dictionary[key]; } }

    // Same as above - within the class you can still add items to the dictionary.
    void AddItemToDictoinary(String key, Int32 value) {
        dictionary.Add(key, value);
    }
}

你会像这样使用它:

public static void Main() {
    SneakyDictionary dictionary = ...
    dictionary.AddItemToDictionary("one", 1);
    dictionary.AddItemToDictionary("two", 2);
    dictionary.AddItemToDictionary("three", 3);

    // Access items in dictionary using indexer:
    Console.WriteLine(dictionary["one"]);
}
于 2013-10-08T15:26:55.907 回答
1

这是范围的问题。如果您的字典对整个类有用,您可以使用初始化器将其实例化为私有静态(或非)只读字段:

private static readonly Dictionary<string, int> docTypeValue = new Dictionary<string, int> 
{ 
    { "OSD", 1 },
    {"POD", 2},
    {"REC", 3},
    {"CLAINF", 4},
    // and so on
};

但是您也可以依赖称为静态构造函数的 .Net 功能:

private static Dictionary<string, int> docTypeValue;

static YOURCLASSNAME()
{
    docTypeValue = new Dictionary<string, int>();
    docTypeValue.Add("OSD", 1);
   // and so on
}

或这些的组合。

在这两种情况下,您的字典都将根据您当前的方法初始化一次。

于 2013-10-08T15:39:00.797 回答
0

如果它是您不需要属性的私人成员,只需使用 -

private Dictionary<string, int> _docTypeValue;
于 2013-10-08T15:24:46.637 回答
0

根据我对您的要求的理解“我需要将字典设置为私有字典并检查值。” 您需要在类级别拥有此字典您不需要为字典创建属性只需将其创建为私有字典即可。

类似于上面的答案。

于 2013-10-08T15:25:12.403 回答