如何在C#中动态分配变量

时间:2014-05-23 13:56:20

标签: c# variables dynamic dictionary

我有一个c#test,它使用selenium web驱动程序来测试网页。我有大量的元素名称和xpath位置存储在一个文本文件中(以便其他无法访问代码的人可以在元素的xpath发生更改时进行更新),使用数组和File.ReadAllLines将其读入字典,所以它看起来像这样:

Dictionary<string, string> dictionary = new Dictionary<string, string>();
// dictionary = new Dictionary<string, string>();
foreach (string line in File.ReadAllLines(fileName)) 
{
    if ((!string.IsNullOrEmpty(line)) &&
    (!line.StartsWith(";")) &&
    (!line.StartsWith("#")) &&
    (!line.StartsWith("'")) &&
    (line.Contains("=")))
{
    int index = line.IndexOf("=");
    string key = line.Substring(0, index).Trim();
    string value = line.Substring(index + 1).Trim();

    if ((value.StartsWith("\"") && value.EndsWith("\"")) ||
        (value.StartsWith("'") && value.EndsWith("'")))
    {
        value = value.Substring(1, value.Length - 2);
    }

    dictionary.Add(key, value);
    }
}

然后我定义一个变量,并将匹配键值的值赋给变量。 但是我们页面的不同版本对于相同的元素具有不同的xpath值,因此我想在文本文件中对信息进行版本化,并在脚本中动态分配变量以匹配版本#,因此相同的代码可以测试多个版本。 例如:
我有一个变量字符串版本=&#34; v2.3&#34;或&#34; v2.4&#34;取决于我正在测试的版本。
字典中的一个键是v2.3_usernamefield,value = some xpath
另一个是v2.4_usernamefield,value =与v2.3的不同xpath

我希望能够将版本变量添加到根变量名称中,以便我可以将webdriver的变量设置为特定于版本 - 例如:
              driver.findelement(By.Xpath(版本+ usernamefield))
有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

您似乎正在努力做Dictionary为您做的事情。您不需要创建动态变量。您只需创建动态密钥并根据需要访问它们。

如果您只有一组密钥可供访问,那么Dictionary<string, object>就足够了。例如:

var dict = new Dictionary<string, object() 
    { 
        {"UserName", "John"} , 
        {"OtherAttribute", "Value"} 
    };

如果您现在有一个想要添加的版本,可以将其添加到上一个字典中,如下所示:

var dict = new Dictionary<string, object() 
     { 
         {"v2.3_UserName", "John"}, 
         {"c2.4_UserName", "Kale"} 
     };

或者你可以在另一个词典中创建一个词典:

var versionDictThenKeyValueDict = 
    new Dictionary<string, Dictionary<string, Object>>()
        { 
            {"v2.3", new Dictionary<string, object> { {"UserName", "John"} } 
        };