Я бы выбрал его в виде двух отдельных массивов.
using(StreamReader sr = new StreamReader(fileName)
{
string header[] = sr.ReadLine().Split(' ');
if(header.Length != 2) throw new InvalidDataException("yadda, yadda");
List<string> lines = new List<string>();
//you'll probably want to move that declaration outside the using statement...
while(sr.Peek() != -1)
{
lines.Add(sr.ReadLine());
}
if(lines.Count() != int.Parse(header[1])) //this is wrong so...
throw new InvalidDataException("yadda, yadda");
if(lines.AsQueryable().Any(x => x.length != int.Parse(header[0]))// this, too
throw new InvalidDataException("yadda, yadda");
}
Проблема в том, что в ваших образцах данных есть пробелы, и этот код не предполагает пробелов в данных.Поэтому нам нужно это исправить ...
List<string[]> separatedLines = new List<string[]>();
lines.ForEach(x => separatedLines.Add(x.Split(' ')));
if(separatedLines.AsQueryable().Any(s => s.Length != int.Parse(header[0])))
throw new InvalidDataException("yadda, yadda");
Некоторые из них изменятся, если я неправильно понял ваши примеры данных, но сначала они возьмут строку заголовка и будут использовать ее значения для проверки остальныхваши данные.Перепроверьте меня по .AsQueryable()
звонкам, хотя у меня не было такого большого количества шансов использовать Linq, как хотелось бы, поэтому я собираюсь получить относительно ограниченный опыт по этому вопросу.Я знаю, что когда я попробовал, использование методов Linq Extension в List заняло небольшую акробатику ...