У меня есть следующий метод, который работает:
public Option<IAppSettings> GetFirst<T>() where T : IAppSettings
{
return _sources.Where(x=>x.GetType() == typeof(T)).FirstOption();
}
List<IAppSettings> _sources;
Но я хочу изменить подпись на:
public Option<T> GetFirst<T>() where T : IAppSettings
Обратите внимание, что я возвращаю общий T
вместо IAppSettings
Я получаю сообщение об ошибке (усеченные типы):
Невозможно преобразовать тип выражения
Option<IAppSettings>
вOption<T>
Я знаю, что это как-то связано с дженериками, но, по общему признанию, отстой в них... Я пробовал разные средства in
, out
, interface
, delegate
... но ни один из них не работал, так как это метод на неуниверсальном класс с использованием переменной экземпляра.
Это вообще возможно?
Обновленные мысли
Должен ли я изменить спецификации типа в Option
? Если да, то я предполагаю, что это должно быть Option<in T>
? Я говорю это только потому, что Option
в Scala имеет тип Option[+A]
. У меня есть исходный код для Option
, но его трудно изменить и подтолкнуть... поэтому я решил сначала спросить здесь, но попробую это дальше
Этот Option
взят из моего форка Scalesque
public class Parent<T>{}
? В этом случае этот общий тип может влиять на метод. - person Travis J   schedule 16.04.2015sources
этоList<IAppSettings>
, хотя - person Justin Pihony   schedule 16.04.2015