Lassen Sie uns diesen einen Schritt nach dem anderen beheben. Der erste Schritt ist erforderlich, die nächsten beiden sind optional, werden aber vorgeschlagen.
Die erste Korrektur (die erforderlich ist) stellt sicher, dass Sie nicht ein Objekt eines Typs mit einem Objekt vom Typ System.Type
Vergleich:
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)!
Zweitens vereinfacht diese zu:
if (data is Person) ... // this has (almost) the same meaning as the above;
// in your case, it's what you need.
Drittens erhalten die insgesamtif
Aussage los! Dies geschieht durch Anwendung von Polymorphismus (oder, genauer gesagt, Verfahrensüberschreibung), z. wie folgt:
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();
}
}
wie Sie durch den Bedingungscode zu sehen, hat mich in ein Check
Verfahren der Base_Data
Klasse und ihre abgeleiteten Klasse Person
verschoben. Eine solche Typprüfung entfällt if
!
IMHO: Bitte überdenken Sie diese Art von Design. Entweder arbeitet Ihre Methode mit dem Typ "Base_Data" oder sie arbeitet mit den Unterklassen "Person" und "Phone". Wenn es mit 'CheckObject' wirklich unterschiedliche Dinge gibt, warum sollte man nicht einfach die Methode überladen und separate' CheckObject (Phone phone) 'und' CheckObject (Person person) 'Methoden verwenden? Es ist nicht viel mehr Code und Sie bekommen etwas Kompilierzeit, die überprüft, dass die Base_Data-Unterklasse, die Sie zu "CheckObject" übergeben, von "CheckObject" unterstützt wird. – mlibby