Arg使用for-switch分配

时间:2014-10-13 16:02:57

标签: c# arrays arguments switch-statement

所以我正在编写一个从配置文件中读取参数的程序。

我知道我可以将它们读入数组,然后从数组中为每个变量分配相应的元素。然后我想,为什么不在我阅读它们时分配它们,我知道它们将事先读出的顺序。所以我在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;
            }
       }
然而,在写完之后,它看起来真的很难看,而且我认为必须有更好的方法。

我的问题是:

  1. 有更好的方法吗?
  2. 如果是,那是什么?
  3. 如果不是,最好是读入数组并分配,或者使用for-switch结构以及为什么?
  4. 提前致谢!

2 个答案:

答案 0 :(得分:1)

我不会为每一行声明三个单独的变量,而是将它们存储在ListArray.中。您可以轻松地使用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