我正在处理使用XML文件的win form应用程序处理
我将此代码添加到表单加载事件
if (!File.Exists("clients.xml"))
{
List<string> lines = new List<string>();
lines.Add("<clients>");
lines.Add("</clients>");
File.WriteAllLines("clients.xml", lines);
}
else if (!File.Exists("cases.xml"))
{
List<string> lines = new List<string>();
lines.Add("<names>");
lines.Add("</names>");
File.WriteAllLines("cases.xml", lines);
}
else if (!File.Exists("files.xml"))
{
List<string> lines = new List<string>();
lines.Add("<num>");
lines.Add("</num>");
File.WriteAllLines("files.xml", lines);
}
当我启动我的应用程序时,如果这三个文件都不存在 它只创建第一个文件!!
如果第一个文件只存在,则只创建第二个文件!!
如果两者都存在则会创建第三个..
知道这段代码有什么问题吗?!!
谢谢......
答案 0 :(得分:4)
解决方案:使用if
代替else-if
。
原因:如果您使用if-else
的组合,它只执行first true
方案并进一步跳过。
但如果您对所有条件使用if
,它将执行all true
个方案。
<强>代码:强>
if (!File.Exists("clients.xml"))
{
List<string> lines = new List<string>();
lines.Add("<clients>");
lines.Add("</clients>");
File.WriteAllLines("clients.xml", lines);
}
if (!File.Exists("cases.xml"))
{
List<string> lines = new List<string>();
lines.Add("<names>");
lines.Add("</names>");
File.WriteAllLines("cases.xml", lines);
}
if (!File.Exists("files.xml"))
{
List<string> lines = new List<string>();
lines.Add("<num>");
lines.Add("</num>");
File.WriteAllLines("files.xml", lines);
}
else
{
return;
}
答案 1 :(得分:3)
从else
删除else if
。
这意味着将评估所有if
语句。
你设置它的方式,它有瀑布效果。如果第一个语句为false,则评估第二个语句。如果这是假的,则评估第三个等。
答案 2 :(得分:2)
不要按照您的方式行事:
经验法则:Do not repeat the code
写一个像这样的通用函数:
public void DoStuff(string fileName, List<string> linesToBeWritten)
{
var output = new List<string>();
if (!File.Exists(fileName))
return;
output.Add("<" + fileName + ">");
output.AddRange(linesToBeWritten);
output.Add("</" + fileName + ">");
File.WriteAllLines(fileName, output);
}