无法在第三方类上调用 ToArray()

本文关键字:调用 ToArray 第三方 | 更新日期: 2023-09-27 18:37:21

我打算在第三方类(Kentico)上使用一些LINQ,但似乎无法这样做,我也不知道为什么。我的代码本质上是:

using System;
using System.Collections.Generic;
using System.Linq;
// some additional namespaces
namespace test
{
   public partial class ProductFilter : CMSAbstractBaseFilterControl
   {
       protected IEnumerable<String> GetCategories(String parentName)
        {
            CategoryInfo info = CategoryInfoProvider.GetCategoryInfo(parentName, CMSContext.CurrentSite.SiteName);
            var children = CategoryInfoProvider.GetChildCategories(info.CategoryID, null, null, -1, null, CMSContext.CurrentSite.SiteID);
            children.ToArray();
        }
   }

在这一点上,我收到错误

错误 5 'CMS。SettingsProvider.InfoDataSet' 不包含"ToArray"的定义,也没有扩展方法 "ToArray"接受类型的第一个参数 'CMS。SettingsProvider.InfoDataSet' 可以找到(您是否缺少使用指令或程序集 参考?

CategoryInfoProvider.GetChildCategories定义为:

public static InfoDataSet<CategoryInfo> GetChildCategories(int categoryId, string where, string orderBy, int topN, string columns, int siteId);

信息数据集定义为:

public class InfoDataSet<InfoType> : ObjectDataSet<BaseInfo>, IEnumerable<InfoType>, IInfoDataSet, IEnumerable where InfoType : CMS.SettingsProvider.BaseInfo, new()
{
    public InfoDataSet();
    public InfoDataSet(DataSet sourceData);
    public InfoObjectCollection<InfoType> Items { get; protected set; }
    protected InfoType Object { get; set; }
    public InfoDataSet<InfoType> Clone();
    public IEnumerator<InfoType> GetEnumerator();
    public InfoType GetNewObject(DataRow dr);
    protected override ObjectCollection<BaseInfo> NewCollection();
}

看起来接口已正确实现,我已经为 LINQ 提供了命名空间,我可以进行如下调用List<int> i; i.ToArray(); 我缺少拼图的哪一部分?

无法在第三方类上调用 ToArray()

尝试溜进给AsEnumerable()的电话:

using System;
using System.Collections.Generic;
using System.Linq;
// some additional namespaces
namespace test
{
   public partial class ProductFilter : CMSAbstractBaseFilterControl
   {
       protected IEnumerable<String> GetCategories(String parentName)
        {
            CategoryInfo info = CategoryInfoProvider.GetCategoryInfo(parentName, CMSContext.CurrentSite.SiteName);
            var children = CategoryInfoProvider.GetChildCategories(info.CategoryID, null, null, -1, null, CMSContext.CurrentSite.SiteID);
            children.AsEnumerable().ToArray();
        }
   }
}

问题似乎是编译器无法将children解析为 IEnumerable,即使集合显式实现了接口也是如此。强制将集合视为 IEnumerable(AsEnumerable 这样做)应该允许正确解析 ToArray。