如何将 '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 关系。
更多信息:
我的数据库中有 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 关系。
更多信息: