我有一个方法,它将object
作为参数(这不能更改):
public class MyClass : SomeBaseClass
{
public override void DoFoo(object value)
{
//...
}
}
我知道,对于特定的班级,object
将是List<T>
,其中T
未知。
我想要做的是将object
转换为List<T>
,以便我可以对其进行排序。类似的东西:
public override void DoFoo(object value)
{
var list = value as List<T>; // obviously not valid!
list.Sort();
// ...
}
有没有办法做到这一点?请注意,我不能创建我的类MyClass<T>
,因为类本身必须用作属性的参数,而那些不能使用类型参数:
public class ParentClass<T>
{
[SomeAttr(typeof(MyClass<T>))] // also not valid
public List<T> MyProperty
}
我目前唯一的解决方案是(ab)使用dynamic
:
var list = value as dynamic;
list.Sort();
但我对此并不太满意。
答案 0 :(得分:2)
如果无法解析泛型类型参数,有时使用旧的非泛型接口很有用。
在这种情况下,可以使用以下内容:
public override void DoFoo(object value)
{
var list = ArrayList.Adapter((IList)value);
list.Sort();
// ...
}