2017-09-24 15 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