Что означают угловые скобки для методов LINQ в Intellisense? (Содержит <>, Count <>, Distinct <> и т. Д.) - PullRequest
5 голосов
/ 09 апреля 2010

Они обычно включают дженерики.Но некоторые методы с обобщениями не имеют их, и не все методы расширения имеют их.

Они просто "были там" с самого первого дня, мы все их видели;но я понял, что до сих пор не знаю, что они имеют в виду, и я нигде не могу найти ответ.Теперь это действительно беспокоит меня.Google просто показывает результаты, связанные с XML и т. Д.

Официально ли это где-нибудь задокументировано?Спасибо.

РЕДАКТИРОВАТЬ: Ну, это просто здорово.Так как я только что создал учетную запись, чтобы сделать свой первый пост переполнения стека, чтобы получить ответ на этот актуальный вопрос;Мне не разрешено публиковать мою красивую фотографию Intellisense или создавать новый тег "угловые скобки".Я люблю Stack Overflow, но ... что за приветствие!

Может быть, моя проблема в том, что их на самом деле не называют "угловыми скобками" ... ??

Во всяком случае, я думаю, еслиВы действительно хотите увидеть мой красивый скриншот, который вы могли бы перейти вручную:

Отличительный>

Поднимите меня, пожалуйста, чтобы я мог включить его в пост, спасибо.;)

Ответы [ 5 ]

8 голосов
/ 09 апреля 2010

Эти методы являются общими.

Однако компилятор автоматически выводит параметр универсального типа из вызова метода, поэтому вам не нужно использовать скобки при вызове метода.

Например, если у вас есть IEnumerable<int> myNumbers, следующие четыре утверждения эквивалентны:

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

При первом и третьем вызовах компилятор выводит параметр int, поскольку myNumbers является IEnumerable<int>.

Метод расширения Count объявлен (в System.Core.Dll) так:

public static int Count<TSource>(this IEnumerable<TSource> source);
2 голосов
/ 09 апреля 2010

они для дженериков. Когда вы используете функции, вы не всегда должны вставлять их, потому что во многих случаях компилятор может выяснить это по контексту.

1 голос
/ 09 апреля 2010

Это родовые сигнатуры методов. Я бы посоветовал вам изучить их.

Несколько интересных замечаний о дженериках: во-первых, они не являются дженериками после компиляции. Все типы разрешены и установлены в камне, прежде чем запускать ваше приложение. Во-вторых, компилятор часто может понять, что вы имеете в виду, так что вам не нужно явно об этом говорить. Например, если сигнатура метода DoSomething<T>(t withThis), вы можете вызвать этот метод, например DoSomething<string>("with me") или , вы можете опустить универсальный тип: DoSomething("with me"). Это связано с тем, что компилятор рассматривает типы, передаваемые в метод, в качестве аргументов и вычисляет параметр типа для метода. Потрясающе.

0 голосов
/ 09 апреля 2010

Книга Джона Скита C # in Depth подробно описывает дженерики и linq и многое прояснила для меня - я очень рекомендую.

0 голосов
/ 09 апреля 2010

Это означает, что метод является общим, то есть он не является специфичным для типа.

Хорошая информация о дженериках: http://msdn.microsoft.com/en-us/library/512aeb7t.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...