簡體   English   中英

使用基本類型轉換通用

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM