Outc 매개 변수가있는 메소드를 Func으로 전달할 수 있습니까?
public IList<Foo> FindForBar(string bar, out int count) { }
// somewhere else
public IList<T> Find(Func<string, int, List<T>> listFunction) { }
Func는 형식이 필요하므로 컴파일 할 수 없으며 listFunction을 호출하면 int가 필요하고 out을 허용하지 않습니다.
이 방법이 있습니까?
답변
ref
및 out
형식 매개 변수 정의의 일부는 내장 사용할 수없는 Func
통과 위임 ref
및 out
인수. 물론 원하는 경우 자신의 대리인을 선언 할 수 있습니다.
delegate V MyDelegate<T,U,V>(T input, out U output);
답변
결과를 캡슐화하는 클래스를 작성하지 않겠습니까?
public class Result
{
public IList<Foo> List { get; set; }
public Int32 Count { get; set; }
}
답변
Func
대표 (또는 가족은 Action
그 문제에 대해) 아무것도하지만, 같은 선언 간단한 위임 유형 없습니다
//.NET 4 and above
public delegate TResult Func<out TResult>()
public delegate TResult Func<in T, out TResult>(T obj)
//.NET 3.5
public delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
public delegate TResult Func<T1, T2, T3, TResult>(T1 obj1, T2 obj2, T3 obj3)
등. 대리인은 out / ref 매개 변수를 가질 수 있으므로 귀하의 경우 다른 답변에서 지적한 것처럼 사용자 정의 구현 문제만이 가능합니다. Microsoft가 기본적으로 이것을 포장하지 않은 이유에 대해서는 필요한 조합의 수를 생각하십시오.
delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(T1 obj1, out T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, out T2 obj2)
두 개의 매개 변수 만 있습니다. 우리는 만지지 않았습니다 ref
. 실제로 개발자에게는 번거롭고 혼란 스러울 수 있습니다.
답변
올바른 인터페이스를 노출하고 FindForBar를 호출 한 람다 / 대리인 / 함수 / 방법으로 래핑 할 수 있지만 FindForBar가 원인으로 out 매개 변수로 계산 된 것으로 의심되므로 정보를 버리는 것이 확실해야합니다. ok / safe / desirable / 올바른 결과를 얻었습니다 (FindForBar에 직접 전달할 수있는 경우에도이를 확인해야 함).