尝试从配置文件中读取值时出错

时间:2018-02-08 20:53:14

标签: c#

老实说,我没有得到导致我错误的部分。 “System.IndexOutOfRangeException:'索引超出了数组的范围。'”是我得到的,但不应该发生。

class Program
{
    static void Main(string[] args)
    {
        string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\firstrun\config.cfg";

        if (!File.Exists(path))
        {
            Console.WriteLine("First time running");
            File.Create(path);
        }

        nameMethod(path);

        Console.ReadKey();
    }

    static void nameMethod(string path)
    {
        var lines = File.ReadAllLines(path).ToList();

        var idk = lines.Where(x => x.ToLower().Contains("name:"));

        string[] s = idk.ToString().Split(':');
        Console.WriteLine(s[1]);
    }
}

.cfg中的文字:名称:Nala

1 个答案:

答案 0 :(得分:1)

问题在于您的变量idk,它包含IEnumerable<string>,而ToString()只会返回其类型名称。

以下代码将从集合中获取第一个元素,并将其打印出来:

var idk = lines.Where(x => x.ToLower().Contains("name:"));
var s = idk.First().Split(':');
Console.WriteLine(s[1]);

另外,作为一般建议:如果您不知道变量的类型(名称强烈建议),您可以将光标停留在大多数IDE中的var(VS和VS代码,至少),如果你不认识弹出的类型名称,可能是:它不会返回你想要的。

正如其他人所指出的那样。不要自己进行文本解析; 正确真的很难。相反,决定一种格式,使用可靠的C#解析器,我建议JSON,但XML,YML,INI或任何常见的注释格式都可能为你做好工作!