Файл данных: ( Data.txt ) строки представляют width height
5
6 9
7 2
4 4
Код C #:
var list = new List<dynamic>();
using (var sr = new StreamReader("Data.txt", Encoding.UTF8))
{
list = sr.ReadToEnd().Split('\n').Select(r =>
{
var split = r.Split(' ');
var len = split.Length;
return new {
w = len > 0 ? int.Parse(split[0].Trim()) : 0,
h = len > 1 ? int.Parse(split[1].Trim()) : 0
} as dynamic;
}).ToList();
}
int Area = list.Sum(r => r.h * r.w);
Пример работает как есть. Мне пришлось сделать несколько нежелательных вещей, чтобы заставить его работать.
Сначала мне пришлось объявить список, чтобы избежать области использования - поскольку у меня нет типизированного объекта измерения, я сделал тип динамическим ( var list = новый список <динамический> ()
).
Нежелательная часть - преобразование анонимного объекта в динамический ( как динамический
). В противном случае я получаю
Невозможно неявно преобразовать тип
System.Collections.Generic.List
кSystem.Collections.Generic.List
Почему я получаю эту ошибку? Я знаю, что динамический тип может содержать анонимный тип, так что проблема с расширением ToList ()
и динамикой?
Мне нужно иметь доступ к элементам анонимного списка вне оператора using, как в последней строке вычисления площади.
Решение: Я пошел с ответом dtb. Он избегал использования оператора using и динамики вместе. Спасибо всем за предоставленную информацию!
var list =
(from line in File.ReadLines("Data.txt")
let parts = line.Split(' ')
let width = int.Parse(parts[0])
let height = parts.Length > 1 ? int.Parse(parts[1]) : 0
select new { width, height }).ToList();