私はグーグルではありましたが、満足のいく回答は見つかりませんでした。このサンプルでC#System.Func <Tderived、bool>を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つのタイプがある場合は、2つの方法があります。 –
ジェネリック型の型チェックを行っている場合は、ほとんどの場合、デザインの選択肢が貧弱です。 – juharr
私はそれが型の分散と関係があると言います - コンパイラは親の型への暗黙のキャストを許可しません。 – gobes