C # 4.0 неявно типизированные динамические объекты

Файл данных: ( 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();
5
задан Josiah Ruddell 3 December 2010 в 21:31
поделиться