2010-04-09 3 views
5

그들은 일반적으로 제네릭을 포함합니다. 그러나 제네릭을 사용하는 일부 메서드에는 해당 메서드가 없으며 모든 확장 메서드에 해당 메서드가있는 것은 아닙니다.Intellisense의 LINQ 메서드에서 꺽쇠 괄호의 의미는 무엇입니까? (<>, 개수 <>, 고유 <> 등 포함)

그들은 처음부터 "있었"습니다. 우리는 모두 그것을 보았습니다. 그러나 나는 아직도 그들이 의미하는 바를 알지 못한다는 것을 깨달았고, 나는 어디에서나 답을 찾을 수 없다. 이제 그것은 정말로 나를 괴롭 히고 있습니다. Google은 XML에 관한 결과를 보여줍니다.

어디서나 공식적으로 문서화되어 있습니까? 감사.

편집 : 글쎄요. 방금 첫 번째 스택 오버 플로우 게시물을 만들 계정을 만들었으므로이 레코딩 질문에 대한 답변을 얻으십시오. 내 예쁜 Intellisense 그림을 게시하거나 새 태그 "꺾쇠 괄호"를 만들 수 없습니다. 나는 Stack Overflow를 좋아하지만, 어쨌든 환영합니다!

어쩌면 내 문제는 실제로 "꺾쇠 괄호"라고하지 않는다는 것입니다 ... ??

Distinct>< http://www.freeimagehosting.net/uploads/6a6c2f3268.png

, 그래서 내가 게시물에 포함 할 수 있습니다하시기 바랍니다 덕분에 나를 범프 :

어쨌든, 난 당신이 정말 내 아름다운 스크린 샷을보고 싶은 경우 수동으로 갈 수있는 것 같아요. ;)

+0

ReSharper가 숨 깁니다. 설치 한 후'옵션 -> IntelliSense -> 일반 '을 선택하고 ReSharper의 자체 인텔리 센스 또는 VS – tanascius

+0

중 하나를 선택하십시오. 답장과 투표에 모두 감사드립니다. 제네릭을 알고 있지만 꺾쇠 괄호 (Intellisense에서)의 특정 지정에 대해서는 확실하지 않았습니다. 내 혼란은 다음과 같은 두 가지 버전을 보았을 것 같습니다. new int [] {1,2} .Sum ... 일반 클래스의 확장 메소드에 대해 하나 (꺾쇠 괄호없이) 대괄호) * generic 클래스의 * generic * 확장 메서드! 설명과 확인에 감사드립니다. –

+0

그런데 MSDN 또는 Intellisense의 해당 마크에 대한 일반적인 방법을 사용하는 다른 링크를 가진 사람이 있습니까? 내가 너를 믿지 않는다고해서 ... 나는 아무것도 찾을 수 없다는 게 이상하다는거야. –

답변

8

이러한 방법이 일반적이다.

그러나 컴파일러는 메서드 호출에서 제네릭 형식 매개 변수를 자동으로 유추하므로 메서드를 호출 할 때 대괄호를 사용할 필요가 없습니다. 당신이 IEnumerable<int> myNumbers이있는 경우

는 예를 들어, 다음과 같은 네 개의 명령문은 동일 myNumbersIEnumerable<int> 때문에 첫 번째와 세 번째 통화에서

myNumbers.Count(); 
myNumbers.Count<int>(); 
Enumerable.Count(myNumbers); 
Enumerable.Count<int>(myNumbers); 

는, 컴파일러는 int 매개 변수를 유추합니다.

Count 확장 메서드는 다음과 같이 (System.Core.Dll에) 선언 :

public static int Count<TSource>(this IEnumerable<TSource> source); 
+1

좋은 설명, 고마워요! –

2

그들은 제네릭을위한 것입니다. 함수를 사용할 때 많은 경우에 컴파일러가 문맥에 따라 알아낼 수 있기 때문에 항상 넣지 않아도됩니다.

1

그들은 generic method signatures.입니다. 나는 그들에 대해 배우기를 제안합니다.

제네릭에 대해 몇 가지 흥미로운 점이 있습니다. 첫째, 컴파일 후에는 일반적이지 않습니다. 모든 유형은 앱을 실행하기 전에 해결되고 설정됩니다. 둘째, 컴파일러는 사용자가 의미하는 것을 종종 파악할 수 있으므로 명시 적으로 설명하지 않아도됩니다. 예를 들어 메소드 서명이 DoSomething<T>(t withThis) 인 경우 DoSomething<string>("with me")또는과 같이이 메소드를 호출 할 수 있습니다. DoSomething("with me")은 생략 할 수 있습니다. 이것은 컴파일러가 메서드에 전달 된 형식을 인수로보고 메서드의 형식 매개 변수를 파악하기 때문입니다. 굉장해.

+0

좋은 링크. 그게 내가 찾고 있던 일이야. 고마워. –

0

Jon Skeet의 저서 C# in Depth은 제네릭과 linq에 대해 자세히 설명하고 많은 것을 정리해주었습니다.

관련 문제