列出的对象<t>

时间:2015-10-06 15:46:06

标签: c#-4.0

我有一个方法,它将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();

但我对此并不太满意。

1 个答案:

答案 0 :(得分:2)

如果无法解析泛型类型参数,有时使用旧的非泛型接口很有用。

在这种情况下,可以使用以下内容:

public override void DoFoo(object value)
{
    var list = ArrayList.Adapter((IList)value);
    list.Sort();
    // ...
}