Предположим, у меня есть этот класс:
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;
}
Я скопировал и вставил оператор "если", и он действительно возвращает истину, когда человек на самом деле является "дочерним" типом. Убедитесь, что тип лица действительно относится к типу child, когда вы вводите условие if. Это предполагает, что GetPerson(); всегда возвращает родителя.
Вы пробовали GetType() и typeof()?
Пример:
if (person.GetType() == typeof(Child))
{
...
}
С уважением
Оператор С# "is" может помочь вам в этом, посмотрите здесь использование, используйте его в простом выражении if
if(obj is Person) {//obj is of Person class}
Вы можете использовать person.GetType().ToString() == typeof(Child).ToString()
if (person.GetType().ToString() == typeof(Child ).ToString())
{
var toys = childPerson.Toys;
}
true
?