C#Generic List转换为实现List 的类

以下代码产生该问题

无法将类型'System.Collections.Generic.IEnumberable<DataField>'隐式转换为’DataFields’。 存在显式转换(您是否错过了演员?)。

我该如何解决这个问题? 我究竟做错了什么?

 public class DataFields : List { } public abstract class DataField { public string Name { get; set; } } public class DataField : DataField { public T Value { get; set; } } public static DataFields ConvertXML(XMLDocument data) { DataFields result = (from d in XDocument.Parse(data.OuterXML).Elements() select new DataField { Name = d.Name.ToString(), Value = d.Value }).ToList(); return result; } 

编辑:将以下信息移至另一个问题。

使用LINQ创建List ,其中T:someClass

另外,我希望能够在此语句中执行类似下面的操作,以便为每个语句设置值的类型。 我怎样才能做到这一点。

 select new DataField { Name = d.Name.ToString(), Value = d.Value } 

将以下构造函数添加到DataFields

 public class DataFields : List { public DataFields() : base() {} public DataFields(IEnumerable items) : base(items){} } 

然后

 public static DataFields ConvertXML(XMLDocument data) { var result = (BLAH..).ToList(); return new DataFields(result); } 

好的,由于你们的一些见解,我找到了解决这个问题的方法

 // Dont use this class // public class DataFields : List // { // } public abstract class DataField { public string Name { get; set; } } public class DataField : DataField { public T Value { get; set; } } public static List ConvertXML(XMLDocument data) { //return List result = (from d in XDocument.Parse(data.OuterXML).Elements() select new DataField { Name = d.Name.ToString(), Value = d.Value }).Cast().ToList(); // use cast return result; } 

正如错误所示,您正在尝试将其中Tstring DataField转换为inheritance自数据Datafield ListDataFields ,并且它们不相同。

所以

DataField不等于DataFields ,如果你想让DataFields ,你可以将你的DataFields作为string的列表DataFields : List

这种方法怎么样:

  public static DataFields ConvertXML(XmlDocument data) { DataFields result = (DataFields)(from d in XDocument.Parse(data.OuterXml).Elements() select new DataField { Name = d.Name.ToString(), Value = d.Value }).Cast(); return result; } 

我们知道每个元素都是DataField因此我们可以将它转换为该类型。