c# - 如何在不知道 T 是什么的情况下将 T 类型的项目添加到 List<T>?

标签 c# wpf generics .net-4.0

我正在处理一个事件,该事件传递指向一个列表和一个 T 新项目的事件参数,我的工作是将新项目添加到列表中。

如果不检查我知道 T 可能是的所有类型,我该如何做到这一点?

当前的代码是这样的几十行:

private void DataGridCollectionViewSource_CommittingNewItem(object sender, DataGridCommittingNewItemEventArgs e)
{
  Type t = e.CollectionView.SourceCollection.GetType();

  if (t == typeof(List<Person>))
  {
    List<Person> source = e.CollectionView.SourceCollection as List<Person>;
    source.Add(e.Item as Person);
  }
  else if (t == typeof(List<Place>))
  {
    List<Place> source = e.CollectionView.SourceCollection as List<Place>;
    source.Add(e.Item as Place);
  }
  ...

如果可以的话,我更愿意这样做:

((List<T>) e.CollectionView.SourceCollection).Add((T)e.Item);

有什么想法吗?

最佳答案

在这里不要使用泛型:

IList source = (IList)e.CollectionView.SourceCollection;
source.Add(e.Item);

您也可以使用 ICollection 代替 IList

关于c# - 如何在不知道 T 是什么的情况下将 T 类型的项目添加到 List<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9468087/

相关文章:

c# - 更改绑定(bind)到 DataGridView 的 DataTable 中的列顺序不会反射(reflect)在 View 中

c# - 使用 FileHelpers 导入 CSV 文件

wpf - 系统托盘中的右键单击上下文菜单

c# - 具有不同样式或模板的 WPF 自定义控件?

多个类的 C# 泛型参数

generics - typescript 泛型类型和未定义

c# - 您可以在不全局注册的情况下注册 Web API ActionFilter 吗?

javascript - 如何在我的下拉列表中添加搜索输入字段?

WPF 如何将 mahapps 图标动态对象绑定(bind)到按钮模板样式

typescript - 使用 ConstructorParameters 扩展泛型类?