【问题标题】:How can I cast a list to an observablecollection in c#?如何将列表转换为 c# 中的 observablecollection?
【发布时间】:2018-12-02 00:25:53
【问题描述】:

我有一个想要转换为 ObservableCollection 的列表,这是我的代码

var list = Models.Lands.FromJson(responce.Result.ToString());
this.Lands = new ObservableCollection<Land>( list );

FromJson 给我返回一个List&lt;Models.Land&gt;,this.Lands 是一个ObservableCollection&lt;Models.Land&gt;

new ObservableCollection&lt;Models.Land&gt;( list ) 给我以下错误:

无法从 System.Collections.Generic.List 转换为 System.Collections.Generic.IEnumerable,

我认为构造函数是为 List 对象重载的。

【问题讨论】:

  • 您的错误中给出的类型是什么? List&lt;T&gt; 可以转换为 IEnumerable&lt;T&gt; 所以大概你的通用对象是不同类型的,但你似乎已经去掉了这个关键信息......

标签: c# list casting observablecollection


【解决方案1】:

我认为您可以执行以下操作来避免您的问题,但仍然使用一行代码:

this.Lands = new ObservableCollection<Land>( list.ToArray<Land>());

但我不确定这是否是一种有效的方法。

【讨论】:

  • 为什么选择 ToArray? ObservableCollection 构造函数采用 IEnumerable,因此无需将所有列表元素复制到数组,然后再复制到 ObservableCollection。
  • 我同意你的观点,但我在前几次遇到同样的错误,没有“toArray”你得到了错误,错误消失了......不同的是,在 Observable 集合中你是投射 Lands[] 而不是 List,但我同意两者都应该毫无问题地转换为 IEnumerable。
【解决方案2】:

尝试使用非泛型 var 关键字。

List<Land> list =Models.Lands.FromJson(responce.Result.ToString());
var collection = new ObservableCollection<Land>(list);

【讨论】:

    【解决方案3】:

    在我的浏览器中工作:https://dotnetfiddle.net/VVB8YY

    public static void Main()
    {
        var list = new List<String>{"a", "b", "c"};
        var collection = new ObservableCollection<string>(list);
    
        foreach (var value in collection)
        {
            Console.WriteLine(value);
        }
    
        Console.WriteLine("Hello World");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      相关资源
      最近更新 更多