簡體   English   中英

如何用字符串調用字典

[英]how to call a dictionary with a string

我有 4 個字典,每個包含一個按鈕的名稱和按鈕的值。 我有一個包含每個字典名稱的列表

    private Dictionary<string, int> TableArray = new Dictionary<string, int>() { { "ButtonRMT35", 35 }, { "ButtonRMT17", 17 }, { "ButtonRMT11", 11 }, { "ButtonRMT8", 8 }, { "ButtonRMT5", 5 } };
    private Dictionary<string, int> ParArray = new Dictionary<string, int>() { { "ButtonRMP20", 20 }, { "ButtonRMP15", 15 }, { "ButtonRMP10", 10 }, { "ButtonRMP5", 5 } };
    private Dictionary<string, int> MaxChipsRPArray = new Dictionary<string, int>() { { "ButtonRPC20", 20 }, { "ButtonRPC15", 15 }, { "ButtonRPC10", 10 }, { "ButtonRPC5", 5 } };
    private Dictionary<string, int> QuestionSerieRPArray = new Dictionary<string, int>() { { "ButtonRPQ20", 20 }, { "ButtonRPQ15", 15 }, { "ButtonRPQ10", 10 }, { "ButtonRPQ5", 5 } };

    public List<string> DictionaryList = new List<string>() { "TableArray", "ParArray", "MaxChipsRPArray", "QuestionSerieRPArray" };

我想做這樣的事情

foreach (var dictionnary in DictionaryList)
        {
            foreach (var buttonName in dictionnary.Keys)
            {
                DoSomething();
            }
        }

有沒有辦法做到這一點?

您走在正確的軌道上,但是很難通過使用變量名來實現。

使用嵌套列表,如下所示: List<Dictionary<string, int>> dictionaryList

然后將您的字典添加到列表中,並像您最初想要的那樣在 for each 循環中迭代它們。

List<string> ( DictionaryList ) 包含字符串。 這些字符串不是變量標識符(變量標識符與 C#/.NET 字符串不同;變量標識符是 C# 語言中的詞法標記,在構建程序期間由 C# 編譯器解析),因此不能用於參考一些變量。

與其在DictionaryList中維護字符串,不如讓它自己維護字典:

private Dictionary<string, int> TableArray = ...
private Dictionary<string, int> ParArray = ...
private Dictionary<string, int> MaxChipsRPArray = ...
private Dictionary<string, int> QuestionSerieRPArray = ...

public List<Dictionary<string, int>> DictionaryList = new List<Dictionary<string, int>>()
{
    TableArray, ParArray, MaxChipsRPArray, QuestionSerieRPArray
};

如果您需要通過作為字符串提供的某個名稱訪問字典(無論該名稱是否與變量/字段名稱相關),您可以將列表轉換為字典字典(將某些名稱映射到每個字典):

private Dictionary<string, int> TableArray = ...
private Dictionary<string, int> ParArray = ...
private Dictionary<string, int> MaxChipsRPArray = ...
private Dictionary<string, int> QuestionSerieRPArray = ...

public Dictionary<string, <Dictionary<string, int>>> Dictionaries =
    new Dictionary<string, <Dictionary<string, int>>>()
    {
        ["TableArray"] = TableArray,
        ["MaxChipsRPArray"] = MaxChipsRPArray,
        ["QuestionSerieRPArray"] = QuestionSerieRPArray
    };

...

foreach (var dictionary in Dictionaries.Values)
{
    foreach (var buttonName in dictionary.Keys)
    {
        DoSomething();
    }
}

然后,您可以通過這樣的公共Dictionaries字段按名稱訪問單個字典,例如:

var someDictionaryIWant = Dictionaries["MaxChipsRPArray"];
foreach (var buttonName in someDictionaryIWant.Keys)
{
    DoSomething();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM