我目前正在使用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 {预期
我已经标记了从哪个行触发错误消息的代码。语法确实看起来正确,那么我哪里错了?
答案 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));