使用键值与列表配对可动态创建配对值数组

时间:2014-08-05 20:15:15

标签: c#

我目前正在使用XDocument从XML文档中读取特定属性,这无疑是有效的。现在,我正在尝试使用Keys和Values创建一个数组,以便稍后用于验证。这可能是一个孤立的事件(由于无法谷歌/研究错误),但我遇到的错误消息完全困扰我,语法确实看起来正确。代码如下:

    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;预期

     

错误3}预期

     

错误4 {预期

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

2 个答案:

答案 0 :(得分:4)

您不能将代码嵌套在这样的集合初始值设定项中。如果你记得它包含的每个元素a collection initializer basically calls Add() on the parent,你就会明白为什么这是不可能的。

格式化代码,使其在list.Add(new KVP...)

中调用foreach
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”和“result”更有意义的变量名称。

答案 1 :(得分:1)

您不能在对象初始值设定项中使用foreach,但可以使用Linq:

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