2010-01-02 3 views
9

out 매개 변수를 받아 람다 또는 익명 함수를 작성 :나는 대리인이 내 코드에서 정의한

public bool delegate CutoffDateDelegate(out DateTime cutoffDate); 

내가 대리자를 만들고 람다 또는 익명 기능을 초기화하고 싶지만,이 중 어느 것도 컴파일 .

CutoffDateDelegate del1 = dt => { dt = DateTime.Now; return true; } 
CutoffDateDelegate del2 = delegate(out dt) { dt = DateTime.Now; return true; } 

이 방법이 있습니까?

+2

에 대한 추론되지 않은,하지만 난 그것이 중복이라고 생각하지 마십시오. 연결된 질문은 익명 함수 내에서 부모 (?) 함수의 out 매개 변수를 사용하는 것과 관련이 있습니다. 반면이 매개 변수는 자신의 out 매개 변수를 가진 익명의 함수를 선언하는 것입니다. – Salvador

답변

18

당신은 람다 또는 익명 대리인이 구문을 사용할 수 있습니다 - 당신은 그냥 인수의 유형을 지정하고 그것을 밖으로 표시해야 명시 적 심판 인/아웃이 예상대로 인수를 선언하면서

public delegate bool CutoffDateDelegate(out DateTime cutoffDate); 

// using lambda syntax: 
CutoffDateDelegate d1 = 
    (out DateTime dt) => { dt = DateTime.Now; return true; }; 

// using anonymous delegate syntax: 
CutoffDateDelegate d2 = 
    delegate(out DateTime dt) { dt = DateTime.Now; return true; } 

을 컴파일러가 일반적으로 그들을 추론 할 수 있기 때문에 람다 표현식에서 인자 타입을 선언하는 것은 덜 일반적입니다. 그러나이 경우 컴파일러는 현재 λ/anon 식의 out 또는 ref 인수에 대한 유형을 유추하지 않습니다. 이 동작이 버그/감독인지 또는 왜 이렇게되어야하는지에 대한 언어 이유가 있는지는 확실하지 않지만 충분한 해결 방법이 있습니다. 편집

: 내가 VS2010의 β2에서 빠른 검사를했고, 당신이 인수 유형을 정의해야처럼 아직도 보이는 - 그들이이 옛날의 종류 실현 C# 4.

+4

나는 그것을 버그도 감독도 고려하지 않을 것이다. 나는 그것이 out 또는 ref 매개 변수라는 것을 명시해야한다고 생각합니다. 왜 그냥'(out dt) => ... '라고 쓸 수없는 것이 또 다른 문제입니다. –

+1

그건 실제로 제가 언급 한 것입니다 - 명시 적으로 args를 표시하는/ref는 C#에서 기대됩니다. 대부분의 경우 컴파일러가 유형을 유추하는 훌륭한 작업을하기 때문에 lambdas에 대한 인수 유형을 선언하는 것이 일반적이지 않습니다. 내가 더 명확하게하기 위해 내 소식을 업데이트 할 것입니다. – LBushkin

+2

그냥 우연히 발견 - 만약 당신이 여러 개의 매개 변수를 가지고, 당신은 모두 ref/out 아니더라도, 명시 적으로 모든 유형을 선언해야합니다 – drzaus

관련 문제