c# - 无法从List <datetime?>转换为List <dynamic>

时间:2017-05-04 07:06:38

标签: c# list datetime

我正在尝试在列表中创建一个属性不同的属性。这是我的班级:

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>'

4 个答案:

答案 0 :(得分:8)

如果您知道实例化之前的类型,我建议使用Generics

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
};

答案 1 :(得分:2)

我认为以下更改应该有效: 的 FROM

 public List<dynamic> data { get; set; }

 public dynamic data { get; set; }

答案 2 :(得分:1)

如果它适合您的情况,您可以使用covariant这样的集合:

IReadOnlyList<dynamic> data;
data = new List<string>();

但它仅适用于引用类型。

如果您不关心它是什么类型,您可以使用List作为数据。

为了更方便的访问,您可以使用以下内容:

private IList data;
public IEnumerable<dynamic> Data { get { return data.OfType<dynamic>(); } }

希望它有所帮助。

答案 3 :(得分:0)

您可以使用LINQ转换列表项的类型:

public ChartData(string id, List<DateTime?> data)
{
    this.id = id;
    this.data = data.Cast<dynamic>().ToList();
}

重要提示:在这种情况下,您正在创建列表的副本,并且调用者列表实例中的更改不会反映在ChartData的实例中(尽管可能更好,但。)