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; }
正如错误所示,您正在尝试将其中T
为string
DataField
转换为inheritance自数据Datafield
List
的DataFields
,并且它们不相同。
所以
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
因此我们可以将它转换为该类型。