다음과 같은 경우에 ” ‘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
답변
방법 그룹이의 이름입니다 방법의 설정 (즉, 하나의 수도)를 – 즉 이론의 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
기능은 많은 과부하가 있습니다 – 메소드 그룹이 그 함수에 대한 모든 다른 과부하로 구성된 그룹이 될 것입니다.