2017-09-24 11 views
0

このコードはなぜ機能しますか?IQueryable.Firstはデリゲートを受け入れますか?

List<string> list = new List<string>(); 
list.Add("foo"); 

IQueryable<string> query = list.AsQueryable(); 
var test = query.First((Func<string,bool>)(s => { return s.Contains("foo"); })); 

IQueryable.Firstは式のみを受け入れると考えました。なぜこの場合、代理人を受け入れるのですか?

答えて

0

IQueryable<T>IEnumerable<T>を拡張:

public interface IQueryable<out T> : IEnumerable<T>, IEnumerable, 
    IQueryable 

だからあなたの方法は、実際にEnumerable.FirstなくQueryable.Firstへの呼び出しです。

あなたはIQueryable<T> documentation on MSDNでメソッドのリストを見たときにことがわかります。

enter image description here

+0

私はキャストを使用していなかった場合、私はエラーを得ているでしょう。これはラムダを代理人ではなく式に変換しようとしているからですか? – Gradient

+0

あなたはどういう意味ですか*私はエラー*を受けたでしょうか?どのようなキャストを参照していますか? 'IQueryable 'または 'Func 'へのキャストは? –

+0

のFunc ''へのキャスト。それがなければ、私は誤りを得る。 – Gradient

関連する問題