我从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;
问题是如何知道泛型的类型以及如何在运行时将对象转换为该类型?
答案 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;
}
}