【问题标题】:List of Lists with different type不同类型的列表列表
【发布时间】:2016-01-19 02:50:18
【问题描述】:

我想将不同类型的列表添加到列表中。这是我的方法:

struct Column
{
    public string title;
    public List<dynamic> col;
}

var signals = new List<Column>();
signals.Add(new Column {title = "stringCol", col = new List<string>() });
signals.Add(new Column {title = "doubleCol", col = new List<double>() });

它说List&lt;string&gt; 不能转换为List&lt;dynamic&gt;。我也尝试过使用模板,但没有运行。

【问题讨论】:

  • 你不能这样做,除非你把所有的列表都设置成相同的类型(例如dynamic)。

标签: c# .net list


【解决方案1】:

使用object 而不是dynamic,您将获得object 列表,您可以稍后将其转换为所需的类型。

struct Column
{
    public string title;
    public List<object> col;
}

var signals = new List<Column>();
signals.Add(new Column {title = "stringCol", col = new List<object> {new List<string>() }});
signals.Add(new Column {title = "doubleCol", col = new List<object> {new List<double>() }});

为什么不是动态的?在这里阅读:dynamic vs object type

摘要:

如果您使用动态类型,则您选择使用动态类型,因此选择 大部分时间都在编译时检查之外。

所以这意味着 dynamic 类型将在运行时计算,它并不意味着“任何类型”它意味着“在运行时定义的某些类型”

【讨论】:

  • 正要编辑你的答案,但你打败了我。改为 +1 :)
  • 添加到您的答案中,我建议在结构中使用第三个属性来标识列表的类型。我打算和你一样回答:)
  • @Dom84 这是一个选项,很好的建议:)
  • 如何访问List&lt;string&gt;?我试过signals[0].col.Add("string"),但这会在List&lt;object&gt; 中添加一个元素。
  • @Henste 是的,但是这个object 的基础类型是string
猜你喜欢
  • 2017-03-21
  • 2010-11-26
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多