簡體   English   中英

c# - 無法從List轉換 <DateTime?> 列表 <dynamic>

[英]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.

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