【问题标题】:Cannot convert type list.<string> to string error无法将类型 list.<string> 转换为字符串错误
【发布时间】:2020-03-12 16:52:25
【问题描述】:

我有一个看起来像这样的控制器方法

//cycles through sites in order to populate variables

  foreach (Site s in sites)
            {
                foreach (OffSiteItemDetails d in s.ItemDetails)
                {

                    if (d.itemID != null)
                    {

                        osiItemCost[s.ID] = d.qty * db.Items.Where(x => x.ID == d.itemID).FirstOrDefault().cost(1, false, false);
                        osiLoItemCost[s.ID] += d.qty * db.Items.Where(x => x.ID == d.itemID).FirstOrDefault().cost(1, false, true);

                        osiItemLastCost[s.ID] += db.Items.Where(x => x.ID == d.itemID).FirstOrDefault().cost(d.qty, true, false);

                    }
                 }
             }

它为每个变量生成一个值,例如 osiItemCost[s.ID] 对于一个站点 ID 可能等于 0,但对于另一个站点它可能等于 70

所以我正在尝试为每个站点 ID 创建一个表。目前,如果我离开它喜欢 model.OffReportColumns = new List()

它只会被列表中的下一个站点 ID 覆盖。所以我正在尝试将列表分配给站点 ID。

foreach (Site s in sites)
{

    foreach (OffSiteItemDetails d in s.ItemDetails)
    {

        model.OffReportColumns[s.ID] = new List<string>()
            {
                s.Name,
                "",
                "",
                "Average Cost",
                "",
                "",
                "Average Cost (With labour)"
            };      

这是我的模型类

 public class SummaryReportModel
    {
        public string Title { get; set; }
        public string ReportTitle { get; set; }
        public string OffReportTitle { get; set; }
        public List<string> ValuationColumns { get; set; }
        public List<string> OffReportColumns { get; set; }
        public List<List<string>> ValuationRows { get; set; }
        public List<List<string>> OffReportRows { get; set; }
        public List<List<string>> Total { get; set; }
        public List<List<string>> OffReporTotal { get; set; }
        public List<List<string>> Tital { get; set; }
        public List<List<string>> SecondTital { get; set; }
        public List<List<string>> osiGrandTotal { get; set; }
    }

s.ID 代表“站点 ID”

目前我收到错误

不能隐式转换类型 'systems.collections.generic.List' 到 'string'

但是,当我删除 [s.ID] 使其看起来像这样时,它会起作用

model.OffReportColumns = new List&lt;string&gt;()

为什么s.ID 会导致问题?

【问题讨论】:

  • OffReportColumns 表示字符串列表,然后OffReportColumns[0] 给出字符串而不是字符串列表,可能您可以将类型List&lt;string&gt; 更改为Dictionary&lt;int, List&lt;string&gt;&gt;s.ID 键。
  • model.OffReportColumns = new List&lt;List&lt;string&gt;&gt;()

标签: c# asp.net-mvc linq


【解决方案1】:

当您使用model.OffReportColumns[s.ID] 时,您将引用索引为s.ID 的单个字符串。当您使用 model.OffReportColumns 时,您将引用整个列表。

您不能将model.OffReportColumns[s.ID] 设置为等于new List&lt;string&gt;(),因为List&lt;string&gt; 不是string

【讨论】:

  • 感谢您解释泰勒。你对我能做些什么来解决这个问题有什么建议吗?我希望它为我的站点表中的每个站点 ID 生成列表。
  • 不完全清楚您要做什么。您是否需要为每个 siteId 提供List&lt;string&gt;?如果是这种情况,OffReportColumns 可能实际上需要是List&lt;List&lt;string&gt;&gt;。如果不能,请尝试在您的问题中提供更多详细信息/上下文?
  • 我更新了我的问题,希望能让您更清楚地了解我想要做什么。
  • 恐怕还是不太清楚。如果您需要将这些集合中的每一个存储在一个集合中,那么它将是 List&lt;List&lt;string&gt;&gt; 而不是 List&lt;string&gt;。当您在 for 循环的每次迭代中将 List&lt;string&gt; 设置为等于您的新列表时,它会覆盖它,因此您需要在此之前使用它或将其存储在另一个集合中(列表列表)。
【解决方案2】:

不是很清楚你想在这里做什么。似乎 OffReportColumns 是一个字符串列表,您正在尝试将一个字符串列表添加到它的某个索引。

如果你这样做

model.OffReportColumns.AddRange(new List<String>(){
    s.Name,
    "string test",
    "etc."
})

您会将新字符串列表的所有项目添加到 OffReportColumns 的末尾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    相关资源
    最近更新 更多