C#에서 메서드 그룹이란 무엇입니까?
다음과 같은 경우 "method group'에서 'string'으로 변환할 수 없습니다."와 같은 오류를 자주 접했습니다.
var list = new List<string>();
// ... snip
list.Add(someObject.ToString);
물론 마지막 줄에 오타가 있었습니다. 왜냐하면 저는 호출 괄호를 잊어버렸기 때문입니다.ToString올바른 형식은 다음과 같습니다.
var list = new List<string>();
// ... snip
list.Add(someObject.ToString()); // <- notice the parentheses
그런데 메소드 그룹이 무엇인지 궁금하게 되었습니다.구글은 MSDN이나 큰 도움이 되지 않습니다.
메소드 그룹은 (단 하나일 수도 있는) 메소드 집합의 이름입니다. 즉, 이론적으로ToString메소드에는 여러 오버로드가 있을 수 있습니다(추가 확장 메소드). ToString(),ToString(string format)기타 - 그러므로ToString그 자체가 "위험한 그룹"입니다.
일반적으로 메서드 그룹을 오버로드 해결을 사용하여 (입력된) 대리자로 변환할 수 있지만 문자열 등으로는 변환할 수 없습니다.
괄호를 추가하면 다시 한 번 오버로드 해결이 시작되고 메서드 호출을 명확하게 식별할 수 있습니다.
또한, 만약 당신이 LINQ를 사용하고 있다면, 당신은 분명히 다음과 같은 것을 할 수 있습니다.myList.Select(methodGroup).
예를 들어, 저는 다음을 가지고 있습니다.
private string DoSomethingToMyString(string input)
{
// blah
}
이렇게 사용할 변수를 명시적으로 설명하는 대신:
public List<string> GetStringStuff()
{
return something.getStringsFromSomewhere.Select(str => DoSomethingToMyString(str));
}
var의 이름을 생략할 수 있습니다.
public List<string> GetStringStuff()
{
return something.getStringsFromSomewhere.Select(DoSomethingToMyString);
}
메서드 그룹을 위임자로 캐스팅할 수 있습니다.
위임 서명은 그룹 중에서 하나의 메서드를 선택합니다.
이 예에서는 다음을 선택합니다.ToString()문자열 매개 변수를 사용하는 오버로드:
Func<string,string> fn = 123.ToString;
Console.WriteLine(fn("00000000"));
이 예에서는 다음을 선택합니다.ToString()매개 변수를 사용하지 않는 과부하:
Func<string> fn = 123.ToString;
Console.WriteLine(fn);
MSDN 검색의 첫 번째 결과는 다음과 같습니다.
메서드 그룹은 호출할 단일 메서드 또는 호출할 특정 메서드를 선택할 오버로드된 메서드 집합을 식별합니다.
제가 이해하는 것은 기본적으로 당신이 그냥 글을 쓸 때입니다.someInteger.ToString다음은 다음을 가리키는 말입니다.
Int32.ToString(IFormatProvider)
또는 다음을 가리키는 말입니다.
Int32.ToString()
그래서 그것은 메소드 그룹이라고 합니다.
그ToString함수에 많은 오버로드가 있습니다. 메서드 그룹은 해당 함수에 대한 모든 다른 오버로드로 구성된 그룹입니다.
언급URL : https://stackoverflow.com/questions/886822/what-is-a-method-group-in-c
'codememo' 카테고리의 다른 글
| 의 기준 매개 변수와 출력 매개 변수 간의 차이입니다.그물 (0) | 2023.05.03 |
|---|---|
| 설명에서 Enum 특성 가져오기 (0) | 2023.05.03 |
| 브라우저에서 Azure Blob Storage에 직접 파일을 업로드하시겠습니까? (0) | 2023.05.03 |
| ASP에서 환경 변수를 읽습니다.NET 코어 (0) | 2023.05.03 |
| 각 루프의 역순 (0) | 2023.04.28 |