Во-первых, убедитесь, что вы используете неиспользуемые ресурсы, такие как потоки, в операторах использования.
Лично мне нравится мой класс LineReader , который облегчает чтение строк текста из файла (или вообще чего-либо еще).
Далее, я бы избегал использования массивов , если только вам это не нужно. List<T>
обычно намного приятнее работать. Теперь, если string.Split делает то, что вы хотите, вы можете легко получить List<String[]>
. В качестве альтернативы, вы можете выполнить большую часть работы, используя LINQ:
var query = from line in new LineReader("c:\\practice.txt")
let parts = line.Split(',')
select new { Gender=parts[2], Amount=int.Parse(parts[3]) };
Извлечение нескольких агрегатов из одного потока данных довольно сложно в «нормальном» LINQ (именно поэтому мы с Марком Грэвеллом разработали Push LINQ ). Однако вы можете использовать обычный оператор foreach:
int totalCounter = 0, totalSum = 0;
int maleCount = 0, maleSum = 0, femaleCount = 0, femaleSum = 0;
foreach (var row in query)
{
totalCounter++;
totalSum += row.Amount;
switch (row.Gender)
{
case "male":
maleCount++;
maleSum += Amount;
break;
case "female":
femaleCount++;
femaleSum += Amount;
break;
}
}
Если вы сгруппировали строки по полу, вы могли бы сделать это еще проще, особенно если вы знаете, что пол всегда "мужской" или "женский".