2011-12-05 5 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:まあまあです。これらのメソッドを使わないで最後の2行を書き込んでみてください。キャストを実行するか、変数のタイプを明示的に指定する必要があります。これらのメソッドは、これのためのショートカットです。 "short to type"のようなショートカット:-) –

+0

@DanielHilgarthまあ、私が言ったことは本当ですが、コンパイラが 'var'キーワードを使って何をすべきかを知るための具体的な型を提供します。今、意味がある。 :-)編集:私が投稿したものは完全ではなく、その意味では、まったく真実ではありません。はい: –

答えて

2

2つの入力パラメータと1つの戻り値を使用する場合は、Func<T1, T2, TRet>、つまり3つのパラメータを持つものを使用する必要があります。

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); 
関連する問題