2010-06-28 19 views
3

我有以下類:問題與接受的方法2 lambda表達式

public class MyClass<T> where T : class 
    { 
     public void Method1<TResult>(T obj, Expression<Func<T, TResult>> expression) 
     { 
      //Do some work here... 
     } 

     public void Method2<TResult>(T obj, Expression<Func<T, TResult>> expression1, Expression<Func<T, TResult>> expression2) 
     { 
      //Do some work here... 
     } 
    } 

我可以調用方法一這樣的:

MyClass<SomeOtherClass> myObject = new MyClass<SomeOtherClass>(); 

myObject.Method1(someObject, x => x.SomeProperty); 

但是,當我嘗試調用方法二:

MyClass<SomeOtherClass> myObject = new MyClass<SomeOtherClass>(); 

myObject.Method2(someObject, x => x.SomeProperty, x => x.SomeOtherProperty); 

我得到以下編譯時錯誤:

Error 1 The type arguments for method 'MyClass.Method2<SomeOtherClass>.Method2<TResult>(SomeOtherClass obj, System.Linq.Expressions.Expression<System.Func<SomeOtherClass,TResult>>, System.Linq.Expressions.Expression<System.Func<SomeOtherClass,TResult>>)' cannot be inferred from the usage. Try specifying the type arguments explicitly. 

我該如何製作一種方法來接受兩個lambda表達式,並像我打算的那樣調用它?

+0

x.SomeProperty和x => x.SomeOtherProperty是同一類型嗎? – miensol 2010-06-28 13:09:36

回答

7

SomePropertySomeOtherProperty具有相同類型的?如果沒有,那麼你的問題,因爲你正在使用一個TResult類型參數。

的解決方案就是使用兩個類型參數:

public void Method2<TResult1, TResult2>(T obj, Expression<Func<T, TResult1>> expression1, Expression<Func<T, TResult2>> expression2) 
{ 
    //Do some work here... 
} 
4

您是否嘗試過使用2個類型參數?

如:

void Method2<TResult1, TResult2>(T obj, 
    Expression<Func<T, TResult1>> expression1, 
    Expression<Func<T, TResult2>> expression2) 
0

你可以嘗試指定類型參數明確地。

myObject.Method2<string>(
    someObject, 
    x => x.SomeProperty, 
    x => x.SomeOtherProperty); 

如果不工作(說SomeProperty和SomeOtherProperty是不同的類型),你可以允許在方法聲明額外的類型信息。

public void Method2<TResult1, TResult2> 
(
    T obj, 
    Expression<Func<T, TResult1>> expression1, 
    Expression<Func<T, TResult2>> expression2 
)