不能将类型“字符串”隐式转换为“System.Collections.Generic.List

本文关键字:字符串 Generic Collections List System string 转换 类型 不能 | 更新日期: 2023-09-27 17:56:58

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

我有这么一堆代码:

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 );
}

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

但是由于您在那里看到的错误,代码无法编译,我还没有弄清楚为什么。有人帮忙吗?

不能将类型“字符串”隐式转换为“System.Collections.Generic.List<string>”

这是有问题的行:

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

ToString返回一个字符串,并且您正在尝试分配给List<string>变量。

你需要做这样的事情:

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

此语句将按所需的顺序对可枚举listObject进行排序,然后将值转换为字符串,最后将可枚举值转换为List<string>

看看这段代码:

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

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

然后,您将尝试将该string表达式分配给类型为 List<string> 的新变量。这是行不通的。

怀疑你只是想要ToList而不是ToString

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

我认为你想要ToList而不是ToString.

此外,如果您尝试执行的只是删除重复项,则只需使用 LINQ 并执行以下操作:

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

所有代码简化为:

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

还有一些更正要做。下面是完整的代码:

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 );
        }

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

感谢大家的帮助!

int列表转换为string列表:

List<string> listString =  listObject.OrderBy(x => x.m_Type).
Select(x =>x.ToString()).ToList();
string tags = Convert.ToString(item.tagsNcategory.OrderBy(x => x.meta_value.Select(x => x.ToString()))); 
var tags_name = tags.Replace(",", " ");