c# - 将通用列表传递给 ObservableCollection 构造函数

标签 c# generics .net-4.0 observablecollection

我确定我在这里遗漏了一些东西,但是这不起作用的任何特定原因?

public ObservableCollection<object> ItemCollection { get; set; }

private void SetListData<T>(List<T> MyList)
{
    ItemCollection = new ObservableCollection<object>(MyList);
}

在这行不通的情况下,T 有什么值(value)吗?我认为对象集合会涵盖所有情况,但似乎不是:

Error 2 Argument 1: cannot convert from 'System.Collections.Generic.List<T>' to 'System.Collections.Generic.List<object>'

更改属性的签名会导致一系列全新的问题,因此将其更改为:

ItemCollection = new ObservableCollection<T>(MyList);

似乎不是一个好的解决方案。谁能告诉我为什么我的原始代码不起作用,是否有任何简单的修复方法?

最佳答案

你有几个选择:

private void SetListData<T>(List<T> MyList) where T : class

ItemCollection = new ObservableCollection<object>(MyList.Cast<object>());

如果你有一个 List<T>对于已知引用类型,它可以工作,即使类型参数不是 object :

var list = new List<string>();
var observable = new ObservableCollection<object>(list);

但在这种情况下,您使用的是泛型参数,它不是已知的引用类型;它可以是一个值类型/结构。这些可以“装箱”为 object s 但不是天生的 object

因此,您必须将该参数限制为始终是引用类型,或者允许任何类型 T并显式转换为 object在方法体内。

关于c# - 将通用列表传递给 ObservableCollection 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17192752/

相关文章:

c# - 使用 Rx 确定鼠标拖动结束的正确方法是什么?

c# - 使用另一个接口(interface)从一个接口(interface)实现泛型方法

ios - 是否可以在 Swift 中创建通用闭包?

c# - 获取与正在运行的应用程序关联的图标

Java 无类型泛型类,删除其函数泛型类型

c# - 如何简化对泛型方法的调用,我创建了该方法以跨项目的不同层从一种类型转换为另一种类型

.net - 此SqlTransaction已完成;它不再可用

c# - 如何在 C# 中初始化一个 BigInteger?

C# 编译器优化 - 未使用的方法

c# - .NET 值类型在内存中的布局