2011-12-05 3 views
1

을 유추 할 수 없습니다LINQ는 유형이 쿼리를 수행 할 때 나는 현재, LINQ를 배우고

public static class Linq 
     { 
      // Returns the given anonymous method as a lambda expression 
      public static Expression<Func<Int32, Int32>> 
       Expr<T, R>(Expression<Func<Int32, Int32>> f) 
      { 
       return f; 
      } 
      // Returns the given anonymous function as a Func delegate 
      public static Func<T, R> 
       Func<T, R>(Func<T, R> f) 
      { 
       return f; 
      } 

    } 

//main Fun 

var expr = Linq.Expr((Int32 a, Int32 b) => a + b); 
var fun = Linq.Func((int a, int b) => a + b); 

나는 다음과 같은 오류 Linq.Expr<T,R>(System.Linq.Expressions.Expression<System.Func<int,int>>)' cannot be inferred from the usage. Try specifying the type arguments explicitly. 오류가 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+1

여기'정적 클래스 Linq'의 회원의 포인트는 무엇입니까? 그들은 단순히 전달 된 것을 정확히 반환하고 있습니다. –

+0

@AndrewBarber : 사실이 아닙니다. 이러한 방법없이 마지막 두 줄을 작성하십시오. 캐스트를 수행하거나 명시 적으로 변수 유형을 지정해야합니다. 이 방법은 이에 대한 지름길입니다. "short to type"의 단축키 :-) –

+0

@DanielHilgarth 글쎄, 내가 말한 것은 사실이지만, 당신이 의미하는 바를 알 수있다. 컴파일러가'var' 키워드로 무엇을해야 하는지를 알기위한 구체적인 유형을 제공한다. 이제 말이 되네. :-) 편집 : 내가 게시 한 것은 완전하지 않으며, 그런 의미에서, 사실이 아닙니다. 예 :) –

답변

2

두 개의 입력 매개 변수와 하나의 반환 값을 원하면 Func<T1, T2, TRet>, 즉 세 개의 매개 변수가있는 값을 사용해야합니다.

0

난 당신이 원하는 생각 :

public static class Linq { 
// Returns the given anonymous method as a lambda expression 
public static Expression<Func<T1, T2, R>> 
        Expr<T1, T2, R>(Expression<Func<T1, T2, R>> f) 
     { 
    return f; 
} 
// Returns the given anonymous function as a Func delegate 
public static Func<T1, T2, R> Func<T1, T2, R>(Func<T1, T2, R> f) 
{ 
    return f; 
}} 

사용법 :

var expr = Linq.Expr<int, int, int>((a, b) => a + b); 
var fun = Linq.Func<int, int, int>((a, b) => a + b); 
관련 문제