对列表使用键值对动态创建成对的值数组

本文关键字:数组 创建 动态 列表 键值对 | 更新日期: 2023-09-27 18:16:39

我目前正在使用XDocument从XML文档中读取特定属性,这工作起来很顺利。现在,我试图创建一个键和值的数组,稍后用于验证。这可能是一个孤立的事件(由于无法谷歌/研究错误),但我所经历的错误信息完全难倒了我,语法看起来是正确的。代码如下:

    public Array GetConfig(string FilePath)
    {
            var Document = XDocument.Load("CoreConfig.xml");
            var Results = Document.Descendants().Elements("Database");
            var ReturnList = new List<KeyValuePair<string,string>>();
                string[] DBConfigElements = new string[4]{"Server","Username","Password","Database"};
                int Count = 1;
                var list = new List<KeyValuePair<string, string>>() { // Errors 1,2,3
                foreach (string Elements in Results){
                    new KeyValuePair<string,string>(DBConfigElements[Count],Elements);
                    Count++;
                } // Error 4
            };
      }

显示的错误信息如下:

错误1无效的初始化成员声明符

错误2;将

Error 3} expected

错误4{预期

我已经标记了触发错误消息的代码行。语法看起来是正确的,那么我哪里出错了呢?

对列表使用键值对动态创建成对的值数组

不能像这样在集合初始化项中嵌套代码。如果您还记得集合初始化器基本上为它所包含的每个元素在父元素上调用Add(),那么您就会理解为什么这是不可能的。

格式化代码,使其在foreach中调用list.Add(new KVP...):

var list = new List<KeyValuePair<string, string>>();
foreach (string Elements in Results)
{
    list.Add(new KeyValuePair<string,string>(DBConfigElements[Count], Elements));
    Count++;
}
或者使用Linq:
var list = Results.Select((element, index) => 
    new KeyValuePair<string,string>(DBConfigElements[index], element))
                   .ToList()

您可能还想使用比"list"answers"result"更有意义的变量名。

不能在对象初始化器中使用foreach,但可以使用Linq:

var list = new List<KeyValuePair<string, string>>(
            Results.Select(r => new KeyValuePair<string,string>(DBConfigElements[Count++],r));