C# 从ObservableCollection获取T型的优雅方式<;T>;在.NET4.0中
可能重复:C# 从ObservableCollection获取T型的优雅方式<;T>;在.NET4.0中,c#,types,observablecollection,C#,Types,Observablecollection,可能重复: 这是一个简单的问题。最优雅、最简单的方式是什么 未知类型的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().GetProperti
这是一个简单的问题。最优雅、最简单的方式是什么 未知类型的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().....
}
public void DoSomething(对象oc)
{
//我知道“oc”是一个可观察的集合
//如何不用做就可以得到它的类型
//obj.GetType().GetProperties()。。。。。
}
谢谢您可以将集合传递给通用函数
public static void AddUnknown<T>(this ObservableCollection<T> collection, object item){
collection.Add((T)item);
}
公共静态void AddUnknown(此ObservableCollection集合,对象项){
集合。添加((T)项);
}
然后可以像collection.AddUnknown(obj)
如果编译器不知道您使用的是哪个ObservableCollection,则必须提供该信息,除非您愿意使用反射,您可以编写一个扩展方法来完成此操作
public static Type GetGenericType<T>(this ObservableCollection<T> o)
{
return typeof(T);
}
公共静态类型GetGenericType(此ObservableCollection o)
{
返回类型(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);
}
公共静态无效剂量仪(对象o)
{
var iCollection=o作为iCollection;
如果(iCollection!=null)
{
动态oc=iCollection;
类型t=GetGenericType(oc);
//现在你有了你的类型:)
}
}
公共静态类型GetGenericType(列表o)
{
返回类型(T);
}
使用对象有两种方法:
- 使用反射(您说过这是不可取的)
- 反复试验
- 使用足够广泛的基类或接口
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.");
你知道一种简单而优雅的方法可以把字体从收藏中提取出来吗?我试过这样做:`publicstatict GetType(observecollection collection){return T;}`但我得到一个错误,说类型参数名此时无效。这取决于您通过将其取出所需要的内容。一种方法是通过GetGenericTypeArguments(),问题是示例方法接收到一个observablecollection对象。我需要它来接收一个对象类型的对象,它是一个ObservableCollection,但不是显式的…没错,我会删除它。很抱歉。。
var list = oc as IList;
list.Add(value);