所以我正在编写一个从配置文件中读取参数的程序。
我知道我可以将它们读入数组,然后从数组中为每个变量分配相应的元素。然后我想,为什么不在我阅读它们时分配它们,我知道它们将事先读出的顺序。所以我在for循环中放置了一个开关,并在读取时根据索引分配了每个变量,简化版本如下所示。
private void parseFile(string fileName)
{
string line;
System.IO.StreamReader file = new System.IO.StreamReader( fileName );
for (int i = 0; (line = file.ReadLine()) != null; ) {
line = line.Trim();
//Comments are made by surrounding string in []
if (line[0] == '[' && line[line.Length - 1] == ']') { continue; }
switch (i) {
case 0:
firstVar = line;
break;
case 1:
secondVar = line;
break;
case 2:
ThirdVar = line;
break;
default:
throw new MissingFieldException( "Error in structure of file with variable " + line );
}
++i;
}
}
然而,在写完之后,它看起来真的很难看,而且我认为必须有更好的方法。
我的问题是:
提前致谢!
答案 0 :(得分:1)
我不会为每一行声明三个单独的变量,而是将它们存储在List
或Array.
中。您可以轻松地使用linq执行此操作:
var lines = File.ReadLines("path")
.Where(line => !line.StartsWith("[") &&
!line.EndsWith("]"))
.ToList();
如果您仍然需要将每一行分配给单独的变量,您仍然可以这样做:
if(lines.Count >= 3)
{
var firstVar = lines[0];
var secondVar = lines[1];
var thirdVar = lines[2];
}
答案 1 :(得分:0)
您可能想要尝试字典 - 它是为键/值对设置的。像这样使用它:
Dictionary<string, string> dict = new Dictionary<string, string>();
dict["firstVar"] = "whatever your first line is";
dict["secondVar"] = "second line";
第一个字符串是您的密钥,第二个字符串是您的值。所以“firstVar”将是你想要调用的第一个变量,“secondVar”你的第二个,等等。这些值不需要明确,所以你可以这样做......
string key = "Whatever you're using to determine your key names";
dict[key] = line;
这样您就不必为要存储的每件事物设置单独的变量。在此处阅读更多内容:http://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx