如何通过错误将对象直接添加到嵌套的 ienumerable 集合对象组 - 无法将列表转换为集合

how to add object directly to nested ienumerable collection object group by Error- Cannot convert List to Collection

您好,我创建了几个嵌套的 iEnumerable 实现 classes。 CDS工作流集合 CDS模块集合 CDS 系统集合

下面是我的类

  public class cdssystems
{
    public string cdsSystemName;
    public CDSModuleCollection listModules;

}


 public class cdsmodules
{
    public string moduleName;
    public CDSWorkflowCollection listWorkflows;
    }
 class cdsdelgate
{
    private string delgateName;
    private DateTime fromDate;
    private DateTime toDate;
    private string functionElement;
    private CDSSystemCollection cdsSystemsList;
    private string cdsComments;
    private string JobTitle;

}

   public class cdsworkflows
{
    public string WorkflowName;
    public string ActionGroup;

}

  class CDSWorkflowCollection : ICollection, IEnumerable<cdsworkflows>
{
    private List<cdsworkflows> cdsWorkflowList;
    private readonly object syncObject = new object();

    public CDSWorkflowCollection(IEnumerable<cdsworkflows> cdsWorkflowList)
        : base()
    {
        this.cdsWorkflowList = new List<cdsworkflows>(cdsWorkflowList);
    }

    public IEnumerator<cdsworkflows> GetEnumerator()
    {
        return this.cdsWorkflowList.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.cdsWorkflowList.GetEnumerator();
    }

    public void CopyTo(Array array, int index)
    {
        if ((array.Rank != 1) || ((this.Count + index) > array.Length))
        {
            throw new ArgumentException();
        }

        int count = 0;

        foreach (cdsworkflows cssWorkflow in this.cdsWorkflowList)
        {
            array.SetValue(cssWorkflow, count++);
        }
    }

    public int Count
    {
        get
        {
            return this.cdsWorkflowList.Count;
        }
    }

    public bool IsSynchronized
    {
        get
        {
            return false;
        }
    }

    public object SyncRoot
    {
        get
        {
            return this.syncObject;
        }
    }
}

class CDSSystemCollection : ICollection, IEnumerable<cdssystems>
{
    private List<cdssystems> cdsSystemList;
    private readonly object syncObject = new object();

    public CDSSystemCollection(IEnumerable<cdssystems> cdsSystemList)
        : base()
    {
        this.cdsSystemList = new List<cdssystems>(cdsSystemList);
    }

//其余代码在这里 }

 class CDSDelegateCollection : ICollection, IEnumerable<cdsdelgate>
{
    private List<cdsdelgate> cdsDelegateist;
    private readonly object syncObject = new object();

    public CDSDelegateCollection(IEnumerable<cdsdelgate> cdsDelegateList)
        : base()
    {
        this.cdsDelegateist = new List<cdsdelgate>(cdsDelegateList);
    }

//其余代码在这里 }

不,我想使用 group by 将对象添加到 class,我的代码如下所示

   var results = (from SPListItem item in myItemsList
                                    group item by item["Systems"]
                                        into grp

                                        select new cdssystems()
                                        {
                                            cdsSystemName = grp.Key.ToString(),
                                            listModules = (from item in grp
                                                          group item by item["Modules"] 
                                                              into grpModules
                                                              select new cdsmodules()
                                                              {
                                                                  moduleName = grpModules.Key.ToString(),
                                                                  listWorkflows = (from item in grpModules
                                                                                  group item by item["Workflows"]
                                                                                      into grpWorkflows
                                                                                      select new cdsworkflows()                                                                                             
                                                                                       {                                                                                          

                                                                                           WorkflowName = grpWorkflows.Key.ToString(),
                                                                                           ActionGroup = grpWorkflows.FirstOrDefault()["ActionGroup"].ToString()
                                                                                       }                                                                                      
                                                                                       ).ToList()
                                                              }).ToList()


                                        }).ToList();

我在 ToList() 中遇到错误说

无法将类型 'System.Collections.Generic.List' 隐式转换为 'CDS.BusinessObjects.CDSWorkflowCollection'

我知道参数需要一个集合,我正在传递列表。如何通过集合。请帮忙

删除您的自定义集合类型,改用 .net 框架中的通用集合类型。您可以使用 List<T>IList<T>ICollection<T>几乎 永远不需要编写自己的集合实现。

public class cdsmodules
{
    public string moduleName;
    public CDSWorkflowCollection listWorkflows;
}

变成

public class cdsmodules
{
    public string moduleName { get; set; }
    public List<cdsworkflows> listWorkflows  { get; set; }
}

您还应该遵循正确的可见性指南,切勿直接公开字段。而是使用 属性 和 get;set; 访问器。字段的范围几乎总是 privateprotected.