[C#] 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

그러나 나는 메소드 그룹이 무엇인지 궁금해했습니다. Google 은 많은 도움이나 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);
}


답변

메소드 그룹 을 델리게이트로 캐스트 할 수 있습니다 .

델리게이트 서명은 그룹에서 1 개의 메소드를 선택합니다.

이 예 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기능은 많은 과부하가 있습니다 – 메소드 그룹이 그 함수에 대한 모든 다른 과부하로 구성된 그룹이 될 것입니다.


답변