【问题标题】:Cannot implicitly convert type 'string' to 'System.Collections.Generic.List<string>'无法将类型“字符串”隐式转换为“System.Collections.Generic.List<string>”
【发布时间】:2013-01-17 06:35:15
【问题描述】:

这个问题可能已经回答了数百次了,但这里是。

我有这么一大段代码:

private void PopulateStringDropdownList(List<ObjectInfo> listObject,
                                        object selectedType = null)
{
    List<string> listString = listObject.OrderBy(x => x.m_Type).ToString();
    for (int i = 0; i < listString .Count; i++)
    {
        for (int j = i + 1; j < listString .Count; j++)
        { 
            if (String.Equals(listString [i], listString [j]))
            {
                listString.RemoveAt(j);
            }
        }
    }
    ViewBag.property1 = new SelectList(listString );
}

所以基本上我正在尝试使用来自我传入参数的列表中包含的每个对象的属性的字符串填充下拉列表。

但是由于您在上面看到的错误,代码无法编译,我还没有完全理解为什么。有什么帮助吗?

【问题讨论】:

  • 哪条线失败了? (请花时间自己格式化您的代码以备将来的问题使用。)
  • 使用 ToList() 代替 ToString()。
  • listString 从未使用过。您是否要删除 listObject 中的重复字符串?
  • @HervéSimard 错误在哪里?
  • 来吧伙计们。他有11个声望。让我们先让他适应 SO,然后再投反对票:P。

标签: c# string list


【解决方案1】:

int的列表转换为string的列表:

List<string> listString =  listObject.OrderBy(x => x.m_Type).
Select(x =>x.ToString()).ToList();

【讨论】:

    【解决方案2】:

    还有一些修正需要做。这是完整的代码:

    private void PopulateStringDropdownList(List<ObjectInfo> listObjects, object selectedType = null)
    
            {
                List<string> listString = listObjects.OrderBy(x => x.m_Type)
                                                 .Select(x => x.m_Type.ToString())
                                                 //.Distinct()
                                                 .ToList();
                ViewBag.cardType = new SelectList(listString );
            }
    

    这样找到的正确值是类型的字符串而不是对象的类型。

    感谢大家的帮助!

    【讨论】:

      【解决方案3】:

      您可以将所有代码简化为:

      List<string> listString = listObject.OrderBy(x => x.m_Type)
                                          .Select(x => x.ToString())
                                          .Distinct()  // Remove duplicated entries
                                          .ToList();
      ViewBag.property1 = new SelectList(listString);
      

      【讨论】:

        【解决方案4】:

        我想你想要ToList 而不是ToString

        此外,如果您只想删除重复项,您可以简单地使用 LINQ 并执行以下操作:

        List<string> listString = listObject.OrderBy(x => x.m_Type).
            Select(x => x.ToString()).Distinct().ToList();
        

        【讨论】:

        • 哦!也会试试那个。
        • listObject 是 ObjectInfo 的列表,而不是字符串,所以使用 listObject.OrderBy(x => x.m_Type).Select(l => l.ToString()).Distinct().ToList( )
        • @AndyClaw 谢谢安迪。就像你评论的那样,我想我正在编辑我的答案。
        【解决方案5】:

        这是有问题的行:

        List<string> listString = listObject.OrderBy(x => x.m_Type).ToString();
        

        ToString 返回一个字符串,而您正在尝试分配给 List&lt;string&gt; 变量。

        你需要做这样的事情:

        List<string> listString = listObject.OrderBy(x => x.m_Type)
                                            .Select(x => x.ToString())
                                            .ToList();
        

        此语句会将您的listObject 枚举排序为您想要的顺序,然后将值转换为字符串,最后将枚举转换为List&lt;string&gt;

        【讨论】:

          【解决方案6】:

          看这段代码:

          List<string> listString = listObject.OrderBy(x => x.m_Type).ToString();
          

          右侧的表达式是在 OrderBy 的结果上调用 ToString() - 这本身没有用,并且会导致 string

          然后,您尝试将 string 表达式分配给 List&lt;string&gt; 类型的新变量。那是行不通的。

          怀疑你只想要ToList而不是ToString

          List<string> listString = listObject.OrderBy(x => x.m_Type).ToList();
          

          【讨论】:

          • 不是我不想;相反,它不起作用。我一开始以为是因为接收数据的列表是字符串列表,但是……不。
          • @HervéSimard:你是什么意思?当你尝试这个时失败了什么? m_Type 字段的类型是什么? (请在以后更具体。)
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多