簡體   English   中英

C#Generic List轉換為實現List <T>的類

[英]C# Generic List conversion to Class implementing List<T>

以下代碼產生問題

無法將類型'System.Collections.Generic.IEnumberable<DataField<string>>'隱式轉換為'DataFields'。 存在顯式轉換(您是否錯過了演員?)。

我該如何解決這個問題? 我究竟做錯了什么?

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 <T>,其中T:someClass <U>

另外,我希望能夠在此語句中執行類似下面的操作,以便為每個語句設置值的類型。 我怎樣才能做到這一點。

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

將以下構造函數添加到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;
}

正如錯誤所示,您正在嘗試將其中Tstring DataField<T>轉換為繼承自數據Datafield ListDataFields ,並且它們不相同。

所以

DataField<string>不等於DataFields ,如果你想讓DataFields ,你可以將你的DataFields作為string的列表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因此我們可以將它轉換為該類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM