Приведение общего с базовым типом - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть следующий класс:

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 

}

Почему я не могу привести это в ViewModel, если переменная viewModelAsObject является этим классом, а TData имеет тип SomeClass?

1 Ответ

0 голосов
/ 07 сентября 2018

Я попытался сделать общий пример из показанного вами кода:

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 ().

В противном случае попробуйте сопоставить ваш код с этим примером или создайте пример Minimal, Complete и Verifiable

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...