[英]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.