Как я могу преобразовать List в тип, который наследуется от List <T>? - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть два класса:

public class Row : Dictionary<string,string> {}
public class Table : List<Row> {}

В методе, который должен возвращать объект типа Таблица , я пытаюсь отфильтровать объект типа Таблица с помощью Где -Statement и вернуть это объект после фильтрации.

Table table = new Table();
table = tableObject.Where(x => x.Value.Equals("")).ToList();
return table;

Моя проблема - приведение итогового IEnumerable.

  1. Преобразование с (Таблица) создает исключение InvalidCastException

Дополнительная информация: Невозможно привести объект типа 'System.Collections.Generic.List`1 [Row]' к типу "Таблица".

  1. Преобразование с в виде таблицы приводит к нулевому объекту

Как я могу вернуть объект типа Таблица из IEnumerable?

Ответы [ 4 ]

0 голосов
/ 13 сентября 2018

Вы должны сделать что-то вроде этого:

public class Row{
    //whatever you have inside it
    public string MyValue{get;set;}
}

public class Table{
    public List<Row> Rows{get;set;}
}

Table table = new Table();
//renaming tableObject to bigListOfRows
table.Rows = bigListOfRows.Where(x => x.MyValue.Equals("")).ToList();
0 голосов
/ 13 сентября 2018

Вы можете сделать метод расширения, чтобы сделать эту работу:

static class Extensions
{
    public static Table ToTable<T>(this IEnumerable<T> collection) where T: Row
    {
        Table table = new Table();
        table.AddRange(collection);
        return table;
    }
}

Теперь вы можете просто вызвать этот метод:

table = tableObject.Where(x => x.Value.Equals("")).ToTable();

Или вы можете сделать это напрямую, так как вы создаетепустой Table:

Table table = new Table();
table.AddRange(tableObject.Where(x => x.Value.Equals("")));
return table;
0 голосов
/ 13 сентября 2018

Я полагаю, ваш tableObject является List<Row>. Каждый Table является List<Row>, но не каждый List<Row> является Table, поэтому приведение не работает.

Похоже, что предоставление конструктора было бы очевидным решением:

public class Table : List<Row>
{
    public Table(IEnumerable<Row> rows) : base(rows) {}
}

table = new Table(tableObject.Where(x => x.Value.Equals("")));
0 голосов
/ 13 сентября 2018
Table table = new Table();

не список, поэтому вы должны сделать что-то вроде:

var tables = new List<Table>();
var tableObject = new List<Table>{};
tables = tableObject.ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...