DBから会議室のリストを取得する簡単な機能があります。LINQ with Generic Parameter
public List<ConferenceRoom> RunRoomQuery<T1>(T1 fieldValue, Func<ConferenceRoom, T1, bool> predicate)
{
var confRooms = _dataContext.ConferenceRooms.Where(delegate(ConferenceRoom c)
{
return predicate(c, fieldValue);
});
return confRooms.ToList();
}
は、それが正常に動作します。: 私は次の関数を使用していますあなたが気づいたように、私は "ConferenceRoom"タイプを渡しています。 代わりに、私はそれがより汎用的にすると、このようにT2を渡すしたいと思います:
public List<T2> RunRoomQuery<T1,T2>(T1 fieldValue, Func<T2, T1, bool> predicate)
{
var confRooms = _dataContext.ConferenceRooms.Where(delegate(T2 c)
{
return predicate(c, fieldValue);
});
return confRooms.ToList();
}
confRoom.ToList()「どこで」のどちらかそれについて幸せではないコンパイルしていません。
質問:なぜですか?私はそれが何であるか? 以下はエラーです:
error CS0305: Using the generic method 'ConferenceDB.ConferenceDb.RunRoomQuery<T1,T2>(T1, System.Func<T2,T1,bool>)' requires 2 type arguments
C:\Projects\ConferenceDB\ConferenceDB.cs(82,25): (Related location)
C:\Projects\ConferenceDB\ConferenceDB.cs(69,27): error CS0305: Using the generic method 'ConferenceDB.ConferenceDb.RunRoomQuery<T1,T2>(T1, System.Func<T2,T1,bool>)' requires 2 type arguments
なぜですか?
一般的なタイプは、 'ConferenceRooms'コレクションと互換性がなければなりません。クエリから返された項目が 'T2'と同じでない限り、' .ToList() 'は動作しません。また、 '.Where()'が 'null'を返さないように注意する必要があります。 –