2009-06-03 6 views
15

나는이 서명을 내 클래스의 두 가지 기능을 가지고는, <T>을 Func <T,Tres>으로 변환하는 가장 좋은 방법은 무엇입니까?

public static TResult Execute<TResult>(Func<T, TResult> remoteCall); 
public static void Execute(Action<T> remoteCall) 

어떻게 처음에 두 번째 방법에서 같은 대리자를 전달할 수 있습니다? 대리자 인수를 사용하여 메서드를 만드는 것은 예외가 아닙니다. 일부 예외 정보가 손실되기 때문에
고마워요!

답변

30

더미 반환 값이있는 Func<T, TResult> 유형의 대리자로 묶습니다.

public static void Execute(Action<T> remoteCall) 
{ 
    Execute(t => { remoteCall(t); return true; }); 
} 
8

결과를 제공하지 않는 무언가를 문자 그대로 전달해야합니다.
이것은 무의미한 내용입니다.

당신이 (암시 적 또는 명시 적으로)

Func<T,TResult> MakeDefault<T,TResult>(Action<T> action) 
{ 
    return t => { action(t); return default(TResult);}; 
} 

또는

Func<T,TResult> MakeFixed<T,TResult>(Action<T> action, TResult result) 
{ 
    return t => { action(t); return result; }; 
} 
어떤 결과 값을 제공하고자하는 경우 쉽게 Func<T,TResult>에 양식 Action<T>의 기능을 변환 할 수 있습니다

관련 문제