这是一个简单的问题。什么是最优雅,最简单的方法 未知类型的ObservableCollection的类型?
我有一个方法:
public void DoSomething(object oc)
{
//I know 'oc' is a ObservableCollection<T>
//How to get its type <T> without having to do
//obj.GetType().GetProperties().....
}
由于
答案 0 :(得分:1)
您可以将集合传递给通用函数
public static void AddUnknown<T>(this ObservableCollection<T> collection, object item){
collection.Add((T)item);
}
然后可以像collection.AddUnknown(obj)
如果编译器不知道您正在使用哪个ObservableCollection,则必须提供该信息,除非您愿意使用反射
答案 1 :(得分:1)
您可以编写一个为您执行此操作的扩展方法
public static Type GetGenericType<T>(this ObservableCollection<T> o)
{
return typeof(T);
}
编辑:
这非常有趣:)
我想出了一个使用动态
的解决方案public static void DoSomething(object o)
{
var iCollection = o as ICollection;
if(iCollection != null)
{
dynamic oc = iCollection;
Type t = GetGenericType(oc);
// now you got your type :)
}
}
public static Type GetGenericType<T>( List<T> o)
{
return typeof(T);
}
答案 2 :(得分:0)
使用对象有两种方法:
试错
尝试所有可能的变体:
var list1 = oc as ObservableCollection<int>;
var list2 = oc as ObservableCollection<string>;
var list3 = oc as ObservableCollection<MyClass>;
if (list1 != null)
list1.Add(1);
else if (list2 != null)
list2.Add("str");
else if (list3 != null)
list3.Add(new MyClass());
else
throw new Exception("Unexpected object type.");
使用广泛的基类
var list = oc as IList;
list.Add(value);