Давайте исправим это по одному шагу за раз. Первый шаг обязателен, следующие два необязательны, но рекомендуется.
Первое исправление (которое требуется) гарантирует, что вы не сравниваете объект какого-либо типа с объектом типа System.Type
:
if (data.GetType().Equals(typeof(Person))) ...
// ^^^^^^^^^^
// add this to make sure you're comparing Type against Type, not
// Base_Data against Type (which caused the type-check error)!
Во-вторых, упростите это до:
if (data is Person) ... // this has (almost) the same meaning as the above;
// in your case, it's what you need.
В-третьих, избавьтесь от оператора if
всего ! Это делается с помощью полиморфизма (или, точнее, переопределения метода), например следующим образом:
class Base_Data
{
public virtual void Check() { ... }
}
class Person : Base_Data
{
public override void Check()
{
... // <-- do whatever you would have done inside the if block
}
}
class AnotherClass
{
public void CheckData(Base_Data data)
{
data.Check();
}
}
Как видите, условный код был переведен в метод Check
класса Base_Data
и его производного класса Person
. Больше не требуется такой оператор проверки типа if
!