繁体   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