이 문장의 '=>'은 무엇을 의미합니까?연산자 '=>'는 C#에서 무엇을 의미합니까?
del = new SomeDelegate(() => SomeAction());
위의 선언은이 내용과 동일합니까?
del = new SomeDelegate(this.SomeAction);
감사합니다.
이 문장의 '=>'은 무엇을 의미합니까?연산자 '=>'는 C#에서 무엇을 의미합니까?
del = new SomeDelegate(() => SomeAction());
위의 선언은이 내용과 동일합니까?
del = new SomeDelegate(this.SomeAction);
감사합니다.
기본적으로 SomeAction을 호출하는 매개 변수를 사용하지 않는 익명의 함수를 지정합니다. 그렇습니다. 기능적으로 동일합니다. 같지 않아. 도움이
public void CallSomeAction()
{
this.SomeAction();
}
희망 :
del = new SomeDelegate(this.CallSomeAction);
CallSomeAction는 다음과 같이 정의된다 : 람다를 사용하면 더 많은 것과 같습니다!
do "() => ..."구문은 람다 식이라고하며 익명 함수와 동일합니다. 아마도 델리게이트 부분을 생략하고 컴파일러에서 델리게이트 유형을 추측하도록 할 수 있습니다.
del = this.SomeAction;
"del"이 (가) 어떤 형식으로 분류되는지에 따라 다릅니다.
편집
사용 람다 또는 익명 메소드하거나 선발을위한 정기적 인 방법을 사용하여 위임에 대리인의 서명을하지 않은 방법을지도 할 수 있습니다.
예를 들어 bool myDelegate (int, int) 서명이있는 대리자가 있지만 bool myMethod (string, string) 서명을 사용하여 대리자를 처리하려고한다고 가정합니다. 그런 다음 람다 표현식을 사용하여 짧은 구문으로 인라인 할 수 있습니다.
delegate bool myDelegate(int x, int y);
// With lambdas...
myDelegate del = (int a, int b) => myMethod(a.ToString(), b.ToString());
// With anonymous methods...
myDelegate del2 = delegate(int a, int b) { return myMethod(a.ToString(), b.ToString()); };
// The good ol' way without lambdas or anonymous methods...
myDelegate del3 = SomeDelegateHandler;
... then write a method somewhere else ...
// Handler method
private bool SomeDelegateHandler(int a, int b)
{
return myMethod(a.ToString(), b.ToString());
}
그래서 당신은 람다 및 익명 메소드가 대리자를 처리하는 방법을 단지 짧은/인라인 방식으로 기본적으로 있습니다 볼 수 있습니다. 당신의 경우에 추가 방법을 필요로하지 않을 수도 있습니다. 대리자 서명이 메서드 서명과 동일한 지 여부에 달려 있습니다.
=>
은 Lambda Operator이고, 람다 식은 C# 2.0 anonymous methods의 진화와 같습니다.
Func<string,int> wordCount;
wordCount = delegate (string text) { return text.Split().Length; };
Console.WriteLine (wordCount("Hello World"));
사용 람다 표현식 :
이Func<string,int> wordCount;
wordCount = (string text) => { text.Split().Length; };
Console.WriteLine (wordCount("Hello World"));
은 "=>"이 읽을 수 있습니다 "간다 당신은 위임 인스턴스를 생성하기 위해 매우 비슷한 방식으로 익명 메서드와 람다 표현식을 사용할 수 있습니다
to "(source: Eric Lippert)이며 람다 식의 연산과 단순히 인수를 분리합니다. 이 경우 람다는 잔인합니다.더 나은 예는 다음과 같습니다
var subList = list.FindAll(item => item.Type == "Foo");
등에서 (항목의 유형 푸 여기서 모든 항목을 찾을 수) C# 2.0이도 쓸 수 있습니다 :
var subList = list.FindAll(delegate(SomeType item) {
return item.Type == "Foo";});
그리고 빠른 표현 방식은 함수 "인라인"이며 "클로저"지원도 제공합니다. 즉, 다음과 같이 표현할 수 있습니다.
string itemType = ...
var subList = list.FindAll(item => item.Type == itemType);
To 항목 유형에 전달하는 형식 definiton을 필요로 그렇지 않으면 다음을 수행
class Searcher {
public string itemType;
public bool Find(SomeType item) {return item.Type == itemType;}
}
...
Searcher searcher = new Searcher();
searcher.itemType = ...
var subList = list.FindAll(searcher.Find);
사실,이 컴파일러는 우리를 위해 않습니다 정확히 꽤-많이 (모두 "위임"및 람다 사용을 위해). 가장 큰 차이점은 람다가 인 경우 Expression
을 나타낼 수 있다는 것입니다 (예 : LINQ).
" '=>'연산자가 C#에서 의미하는 것은 무엇입니까?"와 같이 질문에 대해 더 자세한 제목을 사용해야합니다. 오히려 "C# delegate question" –
감사합니다. 나는 더 잘 설명하려고 노력할 것입니다. – Krakerjak