2013-04-30 4 views
52

Func을 직접 호출 할 때와 Invoke()를 사용하는 경우의 차이점에 대해 궁금합니다. 차이점이 있습니까? 첫 번째, 문법적인 설탕이고 Invoke()를 어쨌든 호출합니다.Func () vs Func .Invoke()

public T DoWork<T>(Func<T> method) 
{ 
    return (T)method.Invoke(); 
} 

public T DoWork<T>(Func<T> method) 
{ 
    return (T)method(); 
} 

대 아니면 내가 완전히 잘못 트랙 : 감사에서입니다.

+0

http://social.msdn.microsoft.com/Forums/en- 할 수 미국/csharplanguage/thread/f629c34d-6523-433a-90b3-bb5d445c5587 –

답변

67

전혀 차이가 없습니다. 두 번째는 컴파일러가 제공하는 Invoke의 약어입니다. 그들은 같은 일리노이로 컴파일합니다.

호출은 새로운 C# 6 널 전파 운영자와 함께 잘 작동
+0

감사합니다. Jon. 나는 그것이 사실이라고 생각했다. – Tris

+0

Invoke() 메서드를 종료하면 컴파일러 오류가 발생합니다. "암시 적으로 형식 'System.Func '을 'T'"로 변환 할 수 없습니다. .NET 4에 대해 컴파일 중입니다. – Mike

+1

@Mike : 브래킷 *을 놓친 경우에 발생합니다. 즉 ((T) method()가 아닌'(T) 메서드 '를 반환하려고 시도했을 때 발생합니다. –

2

, 지금은 u는

T result = method?.Invoke(); 

대신

T result = method != null ? method() : null; 
+0

이것이 유용한 시나리오를 설명 할 수 있습니까? 교과서는 사건을 일으킨다. – Gusdor