Ключевое слово var не выводит тип RepeaterItem, почему это так? - PullRequest
1 голос
/ 11 февраля 2010

Это быстрый. У меня есть следующий код:

foreach (var item in myRepeater.Items)
{
    MyViewModelItem x = new MyViewModelItem();
    MapToEntity(x, item);
    myList.Add(report);
}

void MapToEntity(object entity, Control control);

Я ожидал, что этот код скомпилируется без проблем. Это не так, однако.
Это привело к ошибке времени компиляции, говорящей о том, что метод «MapToEntity» имеет некоторые недопустимые аргументы. Компилятору не удалось определить тип RepeaterItem, он распознает его как обычный System.Object.

Почему это происходит? Я что-то пропустил?
Ps: я исправил код, удалив ключевое слово var и явно определив тип элемента "RepeaterItem".

Ответы [ 3 ]

6 голосов
/ 11 февраля 2010

RepeaterItemCollection не реализует IEnumerable<RepeaterItem> просто IEnumerable. Таким образом, для компилятора невозможно определить тип.

1 голос
/ 11 февраля 2010

Как сказал Антон, Предметы реализуют только IEnumerable, поэтому он не может определить тип.

Одна вещь, которая может оказаться полезной, - это метод Cast.

myRepeater.Items.Cast<RepeaterItem>()

Хотя ваш пример достаточно прост для того, чтобы это на самом деле не требовалось, он может помочь в более сложных примерах, где вам нужно набрать перечисляемое число

1 голос
/ 11 февраля 2010

Во-первых, ваш пример кода показывает, что вы используете переменную с именем "item" в операторе foreach, а затем объявляете один из другого типа ниже него.

Во-вторых, причина, по которой вы, вероятно, видите его как тип Object, заключается в том, что myRepeater.Items, вероятно, является общей коллекцией, а не специально типизированной, поэтому она будет возвращать тип Object. Вы можете конкретно указать, какой тип в цикле ForEach, и он будет возвращать объекты этого типа, если таковые существуют.

Возможным решением было бы сделать myRepeater.Items.OfType (), а затем вы могли бы использовать ключевое слово var.

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