[英]C# Core Get Generic Class T of Generic 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;
}
正如錯誤所示,您正在嘗試將其中T
為string
DataField<T>
轉換為繼承自數據Datafield
List
的DataFields
,並且它們不相同。
所以
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.