在字典C#中存储为值的字符串列表

时间:2018-05-21 23:28:11

标签: c# localization automated-tests

我有一个测试框架,需要更新以包含西班牙语测试。我有一个CSV文件,其中包含字段标签,英文文本和西班牙文本。我决定使用字典来存储字段标签作为键,值将是西班牙语和英语文本的字符串列表。

   private List<string> ReadTranslationCsv()
    {
        var pathToCSV = @"C:\Location";
        Dictionary<string, List<string>> translations = new Dictionary<string, List<string>>();
        string label, englishText, spanishText;
        using (TextReader fileReader = File.OpenText(pathToCSV))
        {
            var csv = new CsvReader(fileReader);
            csv.Configuration.HasHeaderRecord = false;

            while (csv.Read())
            {
                for (int i = 0; csv.TryGetField<string>(i, out label);)
                {
                    List<string> Spanglish = new List<string>();

                    csv.TryGetField<string>(i + 1, out englishText);
                    Spanglish.Add(englishText);
                    csv.TryGetField<string>(i + 2, out spanishText);
                    Spanglish.Add(spanishText);

                    if (label != "")
                    {
                        translations.Add(label, Spanglish);
                    }   

                    i = i + 3;
                }
            }
        }
    }

我希望能够在值列表中进行搜索,以查看是否有任何内容匹配某些文本字符串。我不确定如何搜索字典中的列表,默认方法或属性都不起作用。

我使用下面的代码,但这会给我一个bool,这不是我需要的,我需要与elementWithText匹配的列表值

    public void GivenElementMatches(string elementWithText)
            {
                if (Config.Language == "Spanish")
                {
                    var list = new List<string> { elementWithText };//must create list in order to pass text to any translations methods
                    Hooks.translations.ContainsValue(list); // Even though the labels are the key, I need to search for the english text which is index 1 of the list and all values should be returned

                }
//TODO
}

1 个答案:

答案 0 :(得分:0)

我的建议是使用包含您创建的类的Dictionary,在该类中可以使用比较功能。

此方法的优点是您可以稍后添加更多语言等效项,只需更改模型。

请注意,此代码不完整,您必须进行错误检查并更改以适应。

Dictionary <string, LangEquivalents> model;

public KeyValuePair<string, LangEquivalents> findField(string input) 
{
    return model.First(x=>x.Value.Comparison(input));
}

您也可以将其设为类似的对象类型,然后使用model.First(x=>x.Value == input));