如何将对象类型转换为泛型类的特定类型

时间:2019-06-10 17:01:10

标签: c# generic-list

我从list的泛型版本继承而来,将一些属性添加到asp.net core中的另一个泛型类中,然后我有了一个接收对象参数的方法。在框架的工作流程中,它将类转换为对象,并将其传递给此方法。因此,我需要将对象强制转换或解析为继承类的特定类。

    public class ClassList<T> : List<T>
    {
        public int SomeProperty {get; set;}
        ....
    }
    public void SomeMethod(object value){

    }

我需要将SomeMethod方法中的对象转换为我创建的泛型类的特定类型。

类似这样的东西:

    ClassList<OtherClass> otherList = (ClassList<OtherClass>) object;

问题是如何知道泛型的类型以及如何在运行时将对象转换为该类型?

1 个答案:

答案 0 :(得分:1)

否,因为它已经boxed,所以只有运行时才能动态知道类是什么。

所以SomeMethod在编译之前不知道通用类是什么

例如:

该代码将出错:

  

CS0411无法从用法中推断方法'UserQuery.SomeClass.SomeMethod(UserQuery.ClassList)'的类型参数。尝试显式指定类型参数。

public class Program
{
    public static void Main()
    {
        object datas = new ClassList<string>() { "github", "microsoft" };

        var result = SomeClass.SomeMethod(datas);//Error :  CS0411 The type arguments for method 'UserQuery.SomeClass.SomeMethod<T>(UserQuery.ClassList<T>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
    }
}

public class ClassList<T> : List<T>
{
    public int SomeProperty { get; set; }
}

public class SomeClass
{
    public static ClassList<T> SomeMethod<T>(ClassList<T> value)
    {
        ClassList<T> otherList = (ClassList<T>)value;
        return otherList;
    }
}