老实说,我没有得到导致我错误的部分。 “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
答案 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或任何常见的注释格式都可能为你做好工作!