c#泛型列表转换为实现List的类

本文关键字:的类 List 实现 泛型 列表 转换 | 更新日期: 2023-09-27 18:14:53

下面的代码产生问题

不能隐式地将类型'System.Collections.Generic.IEnumberable<DataField<string>>'转换为' dataffields '。存在显式转换(您是否缺少强制类型转换?)。

我如何绕过这个?我做错了什么?

public class DataFields : List<DataField>
{
}
public abstract class DataField
{
    public string Name { get; set; }
}
public class DataField<T> : 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<string>
                      {
                          Name = d.Name.ToString(),
                          Value = d.Value
                      }).ToList();
    return result;
}

编辑:将下面的信息移动到另一个问题

使用LINQ创建List<>where T: someClass

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

select new DataField<[Attribute of element called type]>
{
  Name = d.Name.ToString(),
  Value = d.Value
}

c#泛型列表转换为实现List<T>的类

将以下构造函数添加到DataFields

public class DataFields : List<DataField> {
    public DataFields() : base() {}
    public DataFields(IEnumerable<DataField> 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<DataField>
// {
// }
public abstract class DataField
{
    public string Name { get; set; }
}
public class DataField<T> : DataField
{
    public T Value { get; set; }
}
public static List<DataField> ConvertXML(XMLDocument data) {  //return List<DataField>
     result = (from d in XDocument.Parse(data.OuterXML).Elements()
                      select new DataField<string>
                      {
                          Name = d.Name.ToString(),
                          Value = d.Value
                      }).Cast<DataField>().ToList();  // use cast
    return result;
}

由于错误说您正在尝试转换DataField<T>,其中TstringDataFields,从DatafieldList继承,它们不相同。

DataField<string>不等于DataFields,你可以让你的DataFields作为string s的列表,如果你想要这个工作DataFields : List<string>

这个方法如何:

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

我们知道每个元素都是DataField类型,所以可以将其强制转换为该类型。

相关文章: