Появилась проблема. Есть у меня класс First
. Я пытаюсь написать метод на шаблоне T и при попытке вернуть List у меня выходит ошибка:
'IEnumerable' does not contain a definition for 'ToList' and the best extension method overload 'Enumerable.ToList(IEnumerable)' requires a receiver of type 'IEnumerable'
Не могу понять почему такое происходит. Ведь у Enumerable есть toList Почему я не могу выбрать какой тип я хочу подать на выход? Или тут без явного приведения типов не обойтись?
Вот пример моего кода:
class Program
{
List<First> fl = new List<First>();
static void Main(string[] args)
{
}
public List<T> GetF<T>() where T : First
{
return fl.Where(a => a is T).ToList<T>();
}
}
public class First
{
public int Age { get; set; }
}
Смотрите, у вас T : First, т. е. T является First, т. е. в общем случае там может быть любой наследник First. Чуете к чему клоню? Если T : First, то в общем случае обратное неверно: First не является T. Поэтому компилятор не может сделать то что вы хотите. Вам нужно явно повысить тип:
return fl.Where(a => a is T).Select(a => (T)a).ToList<T>();
, либо, что тоже самое, только короче:
return fl.OfType<T>().ToList<T>();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Недавно, исследовав библиотеку Math, нашёл такие функции - DivRem(), IEEERemainder()Прочитав описание понял что функция DivRem() возвращает результат от деления,...
Сижу читаю статью с хабра, постепенно перенося код из презентации в тестовое приложение
Есть 2 объекта которые должны друг от друга зависеть, но один из них может отсутствовать при заполнении пишет: