Я искал Google, но не смог найти удовлетворительных ответов. Я в основном пытаюсь получить этот код на работу:C# convert System.Func <Tderived, bool> to System/Func <Tbase, bool>
public List<WordEntry> WordDataBase = new List<WordEntry>();
public List<CharacterEntry> CharacterDataBase = new List<CharacterEntry>();
public List<Entry> SelectWhere<T>(System.Func<T, bool> predicate) where T : Entry
{
if (typeof(T) == typeof(WordEntry))
return WordDataBase.Where(predicate);
else if (typeof(T) == typeof(CharacterEntry))
return CharacterDataBase.Where(predicate);
else
return null;
}
В этом примере, как WordEntry и CharacterEntry получены из Входа. Я получаю ошибки компилятора:
Error CS1503 Argument 2: cannot convert from 'System.Func<T, bool>' to 'System.Func<WordEntry, int, bool>'
и
Error CS1503 Argument 2: cannot convert from 'System.Func<T, bool>' to 'System.Func<CharacterEntry, int, bool>'
Надеется, что вы можете помочь мне с этим. Заранее спасибо
Я думаю, что это немного бессмысленно, как метод. Если у вас есть 2 типа, используйте два метода. –
Если вы выполняете проверку типов на универсальном типе, вы почти всегда делаете плохой выбор дизайна. – juharr
Я бы сказал, что это имеет какое-то отношение к дисперсии типа - компилятор не разрешает неявный приведение к родительскому типу. – gobes