У меня есть следующий метод, который возвращает динамический объект, представляющий IEnumerable<'a>
('a=anonymous type):
public dynamic GetReportFilesbyStoreProductID(int StoreProductID)
{
Report report = this.repository.GetReportByStoreProductID(StoreProductID);
if (report == null || report.ReportFiles == null)
{
return null;
}
var query = from x in report.ReportFiles
orderby x.DisplayOrder
select new { ID = x.RptFileID, Description = x.LinkDescription, File = x.LinkPath, GroupDescription = x.ReportFileGroup.Description };
return query;
}
Я хочу иметь доступ к свойству Count
этого IEnumerable
анонимного типа. Я пытаюсь получить доступ к вышеуказанному методу, используя следующий код, и он терпит неудачу:
dynamic Segments = Top20Controller.GetReportFilesbyStoreProductID(StoreProductID");
if (Segments.Count == 0) // <== Fails because object doesn't contain count.
{
...
}
- Как работает ключевое слово
dynamic
? - Как я могу получить доступ к свойству
Count
анонимного типаIEnumerable
? - Есть ли способ использовать этот анонимный тип или мне нужно создать пользовательский объект, чтобы я мог вернуть строго типизированный
IEnumerable<myObject>
вместоdynamic
?
Я бы предпочел не делать этого, если могу, поскольку этот метод вызывается только в одном месте, и создание одноразового объекта кажется излишним.
IEnumerable
из них. Использование для этой цели динамического типа сводит на нет все преимущества статической типизации. - person Kirk Woll   schedule 09.06.2011dynamic
используется и не используется; Я отлично справляюсь с написанием Javascript, Clojure и т. д., где (удушье) все динамично! Однако я согласен с тем, что использованиеdynamic
в этой ситуации не является идиоматическим. Я бы лично сделал одноразовый именованный тип или передвинул бы вещи, чтобы исключить необходимость этого делать. - person mqp   schedule 09.06.2011var
и именованных типов и использоватьdynamic
для каждого объявления типа, которое у вас есть? - person Kirk Woll   schedule 09.06.2011dynamic
для обхода неудобных битов C#. - person mqp   schedule 09.06.2011