oop Проверьте, является ли возвращаемый тип родительским или дочерним классом.

2

Предположим, у меня есть этот класс:

public class Parent
{
    public string Name {get; set;}
}

и этот класс, который наследуется от Parent:

public class Child : Parent
{
    public string Toys {get; set;}
}

В некотором случайном классе у меня есть функция, которая возвращает Parent:

public class SomeClass
{
    public Parent GetPerson()
    {
      if (whatever)
      {
        return new Parent { Name = 'Parent' };
      }
      else
      {
        return new Child {Name = 'Child', Toys = 'Paper Plane, Spider Man'};
      }
    }
}

когда я называю это GetPerson, я хочу знать, родитель это или ребенок. Я думал, что это может сработать, но это условие всегда ложно

var person = GetPerson();

if (person is Child childPerson) // This is always false :(
{
   var toys = childPerson.Toys;
}
  • 3
    Может быть, условие всегда true ?
  • 1
    Каково реальное состояние? Ваш метод когда-нибудь возвращает ребенка?
Показать ещё 9 комментариев
Теги:
oop
inheritance

4 ответа

2

Я скопировал и вставил оператор "если", и он действительно возвращает истину, когда человек на самом деле является "дочерним" типом. Убедитесь, что тип лица действительно относится к типу child, когда вы вводите условие if. Это предполагает, что GetPerson(); всегда возвращает родителя.

  • 0
    OMG Мне так стыдно. Я поставил неправильную точку останова. В конце концов, это не проблема. Извините, что потратил ваше время. Спасибо, парни :(
0

Вы пробовали GetType() и typeof()?

Пример:

if (person.GetType() == typeof(Child))
{
   ...
}

С уважением

  • 0
    почему это лучше?
  • 0
    На самом деле это «тот же способ» для сравнения, я только что опубликовал другой способ сделать это. Я предпочитаю использовать это вместо GetType () / TypeOf (). Я всегда слышал, что использование «is» быстрее, чем GetType. Как вы думаете?
Показать ещё 1 комментарий
-2

Оператор С# "is" может помочь вам в этом, посмотрите здесь использование, используйте его в простом выражении if

if(obj is Person) {//obj is of Person class}
-4

Вы можете использовать person.GetType().ToString() == typeof(Child).ToString()

if (person.GetType().ToString() == typeof(Child ).ToString())
{
   var toys = childPerson.Toys;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню