以C#形式加载XML文件
本文关键字:XML 文件 加载 | 更新日期: 2023-09-27 17:57:30
在我的程序中,用户可以用按钮保存设置。这家商店正常营业。加载设置不太正常。加载规则时出现问题。我列出了几条规则。我不知道如何指定索引。有人能帮我吗?
保存/加载设置的方法:
private void SaveUserConfigButton_Click(object sender, EventArgs e)
{
var userConfig = new UserConfig();
userConfig.RandomPopulation = (int)_probability;
userConfig.Rule = _gameOfLife.NextGenerationRule.RuleName;
userConfig.Speed = _timer.Interval;
userConfig.UseBoundary = _gameOfLife.UseBoundary;
SaveUserConfig(userConfig);
}
private void MainForm_Load(object sender, EventArgs e)
{
var userConfig = LoadUserConfig(_path);
InputRandomPopulationNumbericUpDown.Value = userConfig.RandomPopulation;
SelectRulesComboBox.SelectedItem = _rules[5]; // <-- here is the problem
SpeedTrackBar.Value = userConfig.Speed;
BoundaryCheckBox.Checked = userConfig.UseBoundary;
}
我的英语不太好,我希望可以理解。
假设userConfig.Rule
是您想要在SelectRulesComboBox
中选择的规则的名称,并且规则的每个实例都有一个名为Name
的属性,那么您需要做的就是在_rules
集合中找到userConfig.Rule
的索引。
如果_rules
是List<T>
,则可以使用FindIndex方法:
SelectedRulesCombobox.SelectedIndex = _rules.FindIndex(r => r.Name == userConfig.Rule);
否则,您可以在_rules
集合中将每个规则与其索引一起投影,并获得第一个具有Name == userConfig.Rule
:的规则
SelectedRulesCombobox.SelectedIndex = _rules.Select((rule, index) => new
{
Rule = rule,
Index = index
})
.First(x => x.Rule.Name == userConfig.Rule)
.Index;
但请记住,如果没有找到Name == userConfig.Rule
的规则,上面的代码将引发异常。
为什么不使用datatable&WriteXml和ReadXml?
void writeResults()
{
DataTable dt = new DataTable();
dt.Columns.Add("configID");
dt.Columns.Add("configValue");
//Other code you want to add
//Then add row for each setting
Datarow r = dt.NewRow();
r["configID"]= "Speed"; //e.g. Speed
r["configValue"]=_timer.Interval.ToString();
dt.Rows.Add(r);
// snip
//then save datatable to file
dt.TableName="UserConfigs";
dt.WriteXml(@"filename_goes_here");
}
从文件中读取设置更容易:
void readSettings()
{
DataTable dt = new DataTable();
dt.ReadXml(@"filename_goes_here");
for(int i = 0; i < dt.Rows.Count; i++)
{
switch(dt.Rows[i][0])
{
case "Speed":
try
{
_timer.Interval=Int32.Parse(dr.Rows[i][1]);
}
catch
{
// we've got a problem !
}
break;
default:break;
}
}
}
编辑:这不是最佳方式,但它可以让你开始。Nuff说:"总是尝试/捕捉验证xml数据的每一个块——永远不要相信用户的输入。"。