如何将 'System.Collection.Generic.List<String>' 转换为 'System.Windows.Documents.List'?

How can I convert 'System.Collection.Generic.List<String>' into 'System.Windows.Documents.List'?

我的数据库中有 table 个医生。所以我试图在我的数据库中获取医生名字的列表。 在 ViewModel class 我使用这段代码来获取它

public List  DoctorsList ()
{
    // string mainconn = Configuration
    List ListOfDoctors;

    using (var context = new GlabDbContext())
    {
        var result = (from c in context.Doctors
                              select c.LastName).ToList();

        ListOfDoctors = result;
    }

    return ListOfDoctors;
}

我想像我的 ViewModel class 的方法一样使用这个函数,它会有一个 return。 但是我收到一条错误消息:

Impossible to convert implicitely 'System.Collections.Generic.List into 'System.Windows.Documents.List'?

我试着这样投射结果

public List  DoctorsList ()
{
    // string mainconn = Configuration
    List ListOfDoctors;

    using (var context = new GlabDbContext())
    {
        var result = (from c in context.Doctors
                              select c.LastName).ToList();
                              
        **ListOfDoctors = (list)result;**
    }

    return ListOfDoctors;
}

但我在应用程序 运行 时收到错误消息。

我该如何解决这个问题?

你可以这样试试:

System.Windows.Documents.List listx = new System.Windows.Documents.List();

foreach (var r in result)
{
    listx.ListItems.Add(new ListItem(new Paragraph(new Run(r)));
}

你的 List ListOfDoctors 看起来确实是

System.Windows.Documents.List ListOfDoctors;

这也是您方法的 return 类型。

你的var result确实是

System.Collections.Generic.List<string> result

这两种类型不兼容,这意味着您不能将一种转换为另一种(如错误消息所述)。

我怀疑您并不是真的想要 return 一个 Documents.List,而是一个 List<string>(只包含那些名字)。所以:

  • 从您的文件中删除 using System.Windows.Documents;
  • 将所有 List 更改为 List<string>

很可能您打算使用 IList or List<T>,但不小心导入了 System.Windows.Documents.List,因此出现了所有后来的错误。

请花点时间想想你真正需要什么 return 类型,如果你想要 return string 元素的集合,那么要么使用 List<string>IList 作为 return 类型:

public IList DoctorsList() // or return List<string> or IList<string> (generic version)
{
    // string mainconn = Configuration
    IList ListOfDoctors;

    using (var context = new GlabDbContext())
    {
        var result = (from c in context.Doctors
            select c.LastName).ToList();

        ListOfDoctors = result;
    }

    return ListOfDoctors;
}

较短的版本(兼容 c# 8):

public IList DoctorsList() // or return List<string> or IList<string> (generic version)
{
    using var context = new GlabDbContext();
    
    return (from c in context.Doctors select c.LastName).ToList();
}

记住:

您只能对兼容的类型进行转换,这意味着应该为两种类型定义适当的转换运算符,或者类型之间应该存在 Base⟶Derived class 关系。


更多信息:

  • 关于强制转换和类型转换阅读 here
  • 关于类型转换运算符阅读 here