(코드 예입니다 주)것으로 someMethod (() => x.Something) C#으로 의미
나는 다음과 같은 구문 한 기능 :
SomeMethod(() => x.Something)
을 무엇 처음 브래킷 표현의 의미?
전달되는 인수에서 속성 이름을 가져 오는 방법이 궁금합니다.이게 가능합니까?
(코드 예입니다 주)것으로 someMethod (() => x.Something) C#으로 의미
나는 다음과 같은 구문 한 기능 :
SomeMethod(() => x.Something)
을 무엇 처음 브래킷 표현의 의미?
전달되는 인수에서 속성 이름을 가져 오는 방법이 궁금합니다.이게 가능합니까?
: 동일 아니 PARAMATERS이없고 x.somepropertydelegate{ return x.someproperty; }
의 타입을 반환 위임
식에서 첫 번째 대괄호는 무엇을 의미합니까?
매개 변수를 사용하지 않는 방법의 경우 람다 구문입니다.이 1 개 매개 변수를했다 경우, 그것은 것 :
SomeMethod(x => x.Something);
는 N + 1 개 인수했다 경우, 그것은 것 :
SomeMethod((x, y, ...) => x.Something);
나는 또한 당신이 얻을 수있는 방법 궁금 건네받은 인수의 프롭퍼티 명. 이것이 가능합니까?
당신의 SomeMethod
다음 예, Expression<Func<T>>
걸리는 경우 :
void SomeMethod<T>(Expression<Func<T>> e) {
MemberExpression op = (MemberExpression)e.Body;
Console.WriteLine(op.Member.Name);
}
이것은 lambda expression입니다. 즉 익명의 함수 또는 대리자를 만드는 방법입니다. 당신이
() => expression
는 다음 인수가없는 함수를 만든 경우
(input parameters) => expression
하고 식의 결과를 반환
일반적인 형태입니다.
C#은 type inference을 사용하여 값의 유형을 파악하고 로컬 변수 (예 : "x"변수)를 lexical closure으로 캡처합니다.
()
은 빈 인수 목록입니다. 인수를 취하지 않고 익명 함수를 정의하면 x.Something
을 반환합니다.
편집 : 후자는 인수가 필요하며 그 인수에 Something이 호출된다는 점이 x => x.Something
과 다릅니다. 이전 버전의 x
은 함수 밖의 어딘가에 존재해야하며 뭔가가 외부의 x
에 호출되어야합니다. 후자의 버전에서는 바깥 쪽 x가있을 필요는 없으며 함수가 있다고해도 뭔가가 여전히 함수에 대한 인수로 호출됩니다.
()는이 매개 변수를 사용하지 않음을 의미합니다. 당신이 람다 표현식을 사용하여 일반 이벤트 핸들러를 할당하는 경우 예를 들어, 그것은 다음과 같을 것이다 :
someButton.Click += (s, e) => DoSomething();
는 것으로 someMethod가 System.Linq.Expressions.Expression<System.Func<object>>
의 유형의 인수가 필요 속성의 이름을 얻으려면. 그런 다음 표현식을 통해 속성 이름을 결정할 수 있습니다. 다른 접근 방법을 정확하게 두 번째 질문에 대해 논의하고 제공
참조 또한 다음과 같은 두 개의 블로그 게시물 :
How to Find Out Variable or Parameter Name in C#?
How to Get Parameter Name and Argument Value From C# Lambda via IL? (또는 "매개 변수 이름을 얻기 위해 .NET Linq에 표현식을 사용하는 방법을 NOT 및 인수 값은 C# Lambda? ")
중복 : http://stackoverflow.com/questions/630330/what-does-mean-in-c/630344#630344 –
괜찮습니다. 나는 'SomethMethod (x => xSomething)'과 어떻게 다른지 궁금하다. –