2010-06-28 3 views
3

나는 다음과 같은 클래스가 : 나는 방법 2를 호출 할 때문제 2 람다

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

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

을 :하지만

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.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. 

2 개의 람다를 받아들이고 의도 한대로 호출하는 방법은 어떻게 만들 수 있습니까?

+0

x.SomeProperty와 x => x.SomeOtherProperty가 같은 유형입니까? – miensol

답변

7

SomeProperty를 수행하고 SomeOtherProperty 동일한 유형이 있습니까? 그렇지 않다면 하나의 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 
)