[英]Cast generic with base type
我有以下课程:
public abstract class ViewModel<TNavigationData> : BindableBase
where TNavigationData : class, new()
{
//....
}
public class SomeClass()
{
public SomeClass()
{
}
}
在代码的某个地方,我试图将给定的视图模型转换为具体泛型的对象。 这是我在做什么:
protected virtual async Task NavigateImplAsync<TData>(IView view, TData navigationData)
where TData : class, new()
{
object viewModelAsObject = GetFromSomewhere() //this is ViewModel<SomeClass>
//typeof(TData) = SomeClass
var t4 = viewModelAsObject as ViewModel<TData>;
//this cast returns null however TData
}
如果viewModelAsObject变量是该类,而TData是SomeClass类型,为什么不能将其转换为ViewModel?
我试图从您显示的代码中做一个一般的例子:
static void Main(string[] args)
{
SomeFunc<SomeClass>();
}
private static void SomeFunc<TData>() where TData : class, new()
{
object gsc = IReturnSomeGenericClassWithSomeClass();
var check = gsc as GenericClass<TData>;
System.Console.WriteLine(check == null ? "is null" : "is not null");
}
private static GenericClass<SomeClass> IReturnSomeGenericClassWithSomeClass() { return new GenericClass<SomeClass>(); }
class SomeClass { }
class GenericClass<T> { }
这个示例工作正常,我想您的函数ViewModelAsObject()中肯定有错误。
否则,请尝试将您的代码映射到此示例,或创建一个最小,完整和可验证的示例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.