【问题标题】:How to resolve: Cannot implicitly convert system.collections.generic.list to system.collections.generic.ienumerable如何解决:无法将 system.collections.generic.list 隐式转换为 system.collections.generic.ienumerable
【发布时间】:2020-09-30 23:09:13
【问题描述】:

我收到此错误

无法将 System.Collections.Generic.List 隐式转换为 System.Collections.Generic.IEnumerable

在使用 C# Razor 构建的页面中尝试使用列表构建 @Html.DropDownList() 时。

有一个名为 SubProgram.cs 的 C# 类,使用以下方法返回 List<>

public List<SubProgram> SubProgramCodeDescriptionList()
{
    List<SubProgram> SubPrograms = new List<SubProgram>();

    // Get the list of SubPrograms for this AcctIII role_code from BudgetAcct3ToSubProgram  table 
    using (var db = Database.Open("DBNAME"))
    {
        string sql = @"
           SELECT l.SubProgramID, l.SubProgram + ' ' + l.SubProgramDesc AS SubProgramDesc
           FROM BARF_SubPrograms l
           WHERE l.Deleted = 0
           ORDER BY l.SubProgramDesc";

        var ListSubPrograms = db.Query(sql);

        foreach (var SubProgram in ListSubPrograms)
        {
            SubProgram item = new SubProgram ();
            item.SubProgramID = SubProgram.SubProgramID;
            item.SubProgramCodeDescr = SubProgram.SubProgramDesc;
            SubPrograms.Add(item);
        }

        db.Close();

        return SubPrograms;
    }
}

这是 SubProgram 类,该方法是该类的一部分:

public class SubProgram 
{
    private int subprogramid;
    private string subprogramcode;
    private string subprogramcodedescr;

    public int SubProgramID 
    {
        get { return subprogramid; }
        set { subprogramid = value; }
    }

    public string SubProgramCode
    {
        get { return subprogramcode; }
        set { subprogramcode = value; }
    }

    public string SubProgramCodeDescr
    {
        get { return subprogramcodedescr; }
        set { subprogramcodedescr = value; }
    }
}

在 Razor 页面的 C# 部分,我创建了一个 SubProgram 类型的对象来填充 SubProgramList

// Create List boxes variable need for this add
List<SubProgram> SubProgramIDdropdownlist = new List<SubProgram>();

// Create SubProgram object so the method can be called
SubProgram subProgram = new SubProgram();

// Pass object to method SubProgramIDdropdownlist to return all of the SubPrograms
SubProgramIDdropdownlist = subProgram.SubProgramCodeDescriptionList();

在上面这个 C# Razor 部分下面的 HTML 页面的 body 部分中,我尝试使用上面的代码填充 DropDownList:

      <label class="FieldLabels">"Search SubPrograms"</label>
            @Html.DropDownList("SubProgramCodes",
             SubProgramIDdropdownlist,
               new  {
                      @id = "Column1",
                      @class = "EditTextBox",
                    }
              )

在最后一部分中,错误发生在 SubProgramIDdropdownlist 上,这就是我得到错误的地方

无法将 System.Collections.Generic.List 隐式转换为 System.Collections.Generic.IEnumerable

还有其他相关的帖子,但不是来自类方法。请帮忙,我知道这可能需要使用演员表,但甚至不确定从哪里开始正确转换。

【问题讨论】:

  • 你是如何在 Razor 页面顶部传递你的模型的?
  • 我没有传递模型,我使用上面添加的代码创建了一个 C# 类来创建类 SubProgram。
  • 您不必将IEnumerable&lt;SelectListItem&gt; 传递给DropDownList 吗?
  • 希望你的答案在这里:stackoverflow.com/questions/34482323/…
  • 您可以参考 Microsoft 文档以查看它是否采用 IEnumerabledocs.microsoft.com/en-us/dotnet/api/…

标签: c# html oop razor asp.net-webpages


【解决方案1】:

我能想到的两种方法:

  1. 在使用 AsEnumerable 的 Razor 页面上

    @Html.DropDownList("SubProgramCodes",SubProgramIDdropdownlist.AsEnumarable(),new { @id = "Column1", @class = "EditTextBox"})


  1. 将返回类型从List&lt;SubProgram&gt;更改为IEnumerable&lt;SubProgram&gt;

    public IEnumerable&lt;SubProgram&gt; SubProgramCodeDescriptionList(){...}

【讨论】:

    【解决方案2】:

    谢谢 tontonsevilla,您的回答对解决这个问题很有帮助。

    我想出的最终解决方案是两个命名空间之间存在冲突,它们都包含 SelectListItem:System.Web.Mvc 和 System.Web.WebPages.Html。 由于我主要在该项目中使用 Razor 页面而不是 MVC,因此我删除了 Razor C# 页面顶部的@using System.Web.Mvc,因为该错误清楚地表明在 System.Web.Mvc 和在 System.Web.WebPages.Html 中,我显然需要使用其中一个,但不能同时使用两者。我能够强制转换这些以使它们工作,但这只是当我意识到这是名称冲突时不需要的大量额外代码。 使用这两个命名空间会在这两个命名空间之间产生冲突,因为 SelectListItem 似乎在两个命名空间中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多