接收和使用任何类型的ObservableCollection <t>

时间:2016-11-25 05:43:31

标签: c#

我遇到了麻烦。

我想收到ObservableCollection的任何集合,并使用它。

例如,有一个类如下

public class Car{
    int num;
    string str;
}

和ObservableCollection

ObservableCollection<Car> carOC = new ObservableCollection<Car>();

真正重要的一点是,实际上我不知道它的存在。我不知道ObservableCollection<T>的类型T是什么。

我想要的是一种显示收到的ObservableCollection<T>属性列表的方法,如下面的

void showingProperties(ObservableCollection<T> coll)
{
    foreach (T item in coll){
        // showing item's property list
    }
}

如果我将此方法用于carOC

showingProperties(carOC);

输出

carOC has properties
num type int32
str type string

我真的不知道接收ObservableCollection<T>并使用它...... 感谢您阅读。

1 个答案:

答案 0 :(得分:2)

事实上,您的问题并没有对ObservableCollection<T>做任何事情。你可以对任何通用集合做同样的事情。只是为了澄清,ObservableCollection<T>会观察您的列表和项目,以便它为您提供有关列表中的变化的信息。它不会观察你的班级结构。在List上执行此操作没有多大意义,因为您的T将在列表中存在多次,但每个对象的信息都相同。所以我建议一个方法,为您提供类型的信息。看它基于类型而不是基于对象。

public string ShowProperties<T>() : where T : class
{
   var props = typeof (T).GetProperties(BindingFlags.Instance | BindingFlags.Public);

    string typeInfo = typeof (T).FullName + Environment.NewLine;
    foreach (var prop in props)
    {
       typeInfo += prop.Name + " " + prop.PropertyType.FullName + Environment.NewLine;
    }

  return typeInfo;
}

如果列表中有不同的项目,由于继承在foreach循环中调用了这几次。但是如果你在循环中使用它,请小心反思。考虑一下缓存。