gpt4 book ai didi

c# - 我们如何检索 WhereSelectListIterator 的第一项?

转载 作者:太空狗 更新时间:2023-10-30 00:40:42 25 4
gpt4 key购买 nike

我们如何检索 WhereSelectListIterator 的第一项?通常,我使用 foreach 循环进行迭代。有没有办法调用 myResult[0]myResult.FirstOrDefault() 的等效项。两者都抛出错误。 myResult.ToList() 也不起作用。我开始认为我们可以使用 WhereSelectListIterator 做的唯一事情就是使用 foreach 进行迭代。

场景如下:我创建了一个带有 Shape 布局的 Orchard 查询。形状模板包含以下代码:

@{
// content items is of type WhereSelectListIterator<T,T>
var contentItems = Model.ContentItems;
dynamic firstItem = null;

// {"Cannot apply indexing with [] to an expression of type 'object'"}
//// firstItem = contentItems[0];

// {"'object' does not contain a definition for 'ToList'"}
// var items = contentItems.ToList();

// get the title of the first content item
// this is what DOES work
foreach (var contentItem in contentItems)
{
firstItem = contentItem;
break;
}
}

<h2>@(firstItem != null ? firstItem.TitlePart.Title : "Got Nothing")</h2>

具体来说,contentItems 是类型

System.Linq.Enumerable.WhereSelectListIterator<
Orchard.Projections.Descriptors.Layout.LayoutComponentResult,
Orchard.ContentManagement.ContentItem>

如果您需要更多关于我可能想要检索第一个项目的原因的详细信息,请告诉我。

最佳答案

问题是您有一个动态对象,您尝试使用的 LINQ 方法(ToList、FirstOrDefault)是 IEnumerable<T> 上的扩展方法。 .当扩展方法像实例方法一样被调用时,DLR 在运行时没有足够的信息来解析扩展方法。由于扩展方法实际上只是附加了特殊属性的静态方法,因此您也可以以静态方式调用它们:

var contentItems = Model.ContentItems;
dynamic firstItem = System.Linq.Enumerable.FirstOrDefault(contentItems);

关于c# - 我们如何检索 WhereSelectListIterator 的第一项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25172663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com