[英]c# - Cannot convert from List<DateTime?> to List<dynamic>
我試圖在列表中創建一個屬性不同的屬性。 這是我的班級:
public class ChartData
{
public string id { get; set; }
public List<dynamic> data { get; set; }
public ChartData()
{
}
public ChartData(string id, List<DateTime?> data)
{
this.id = id;
this.data = data;
}
}
public ChartData(string id, List<float?> data)
{
this.id = id;
this.data = data;
}
public ChartData(string id, List<int?> data)
{
this.id = id;
this.data = data;
}
在代碼中我使用data
列表來存儲DateTime?
, float?
還是int?
數據。 我該怎么做才能將這些不同的類型存儲在一個類屬性中?
我收到錯誤:
Argument 2: cannot convert from 'System.Collections.Generic.List<System.DateTime?>' to 'System.Collections.Generic.List<dynamic>'
如果您在實例化之前知道類型,我建議使用泛型
public class ChartData
{
public string id { get; set; }
}
public class ChartData<T> : ChartData
{
public List<T> data { get; set; }
public ChartData()
{
}
public ChartData(string id, List<T> data)
{
this.id = id;
this.data = data;
}
}
用法:
ChartData<int> intData = new ChartData<int>("ID1", new List<int>());
ChartData<DateTime> dateData = new ChartData<DateTime>("ID1", new List<DateTime>());
ChartData<float> floatData = new ChartData<float>("ID1", new List<float>());
List<ChartData> list = new List<ChartData>() {
intData,
dateData,
floatData
};
我認為下面的改變應該有效: FROM
public List<dynamic> data { get; set; }
至
public dynamic data { get; set; }
如果它適合您的情況,您可以使用這樣的協變集合:
IReadOnlyList<dynamic> data;
data = new List<string>();
但它僅適用於引用類型。
如果您不關心它是什么類型,您可以使用List作為數據。
為了更方便的訪問,您可以使用以下內容:
private IList data;
public IEnumerable<dynamic> Data { get { return data.OfType<dynamic>(); } }
希望能幫助到你。
您可以使用LINQ轉換列表項的類型:
public ChartData(string id, List<DateTime?> data)
{
this.id = id;
this.data = data.Cast<dynamic>().ToList();
}
重要說明:在這種情況下,您正在創建列表的副本,並且調用者的列表實例中的更改將不會反映在ChartData
的實例中(盡管可能更好)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.