Dies scheint eine sehr dumme Frage nach Gießen zu sein, aber ...„Präfix“ und „wie“ cast
Ich habe folgendes Setup:
Es gibt eine Reihe von Klassen derivces von einem Haupt Klasse. Irgendwann in Zeit und Raum bekomme ich einen Gegenstand und möchte ihn als Objekt der Unterklasse behandeln.
asume:
class subClassA : mainclass
class subClassB : mainclass
Jetzt habe ich einige, wenn die Klasse zu fragen, es ist:
if(someObject is subClassA)
{
subClassA aA = someObject as subClassA ;
}
für die meisten Subklassen das richtige Objekt Während zurückgegeben, bekomme ich für eine Subklasse eine null
- Objekt.
Wenn ich Folgendes tun:
if(someObject is subClassA)
{
subClassA aA = someObject as subClassA ; // <- aA = null; someObject is shown in debugger as object of subClassA
object test = someObject as subClassA; // <- object is not null
// or
subClassA aB = (subClassA)someObject; // <- object is not null, shows the correct object
}
Ich habe Ergebnisse in test
und aB
.
Was ich nicht verstehe:
Warum as
fehlschlagen und der Präfix Guss gelingen?
Jetzt bin ich komplett verloren.
if(someObject is subClassA)
{
subClassA aA = someObject as subClassA ; // <- aA = null; someObject is shown in debugger as object of subClassA
subClassA aB = someObject as subClassA ; // <- aB != null.
}
if(someObject is subClassA)
{
subClassA aB = someObject as subClassA ; // <- aB != null.
}
Der Name aA ist lokal definiert. Nur ein Thread greift auf die Methode zu. Wenn ich nur aA umbenenne, funktioniert es.
Sind Sie sicher, dass 'someObject' selbst nicht' null' ist? –
Das einzige, was mir einfällt, ist, dass dies mit einem verwirrten Typ zu tun hat? Wirfst du möglicherweise von einem Typ mit demselben Namen, aber einer anderen Assembly-Version? –
-stanley Ich bin mir sicher, dass someobject nicht null ist - es zeigt Einträge und wird korrekt in späteren Zeilen umgewandelt @piohony kopiert und fügt den Typ aus dem is in beide anderen Erscheinungsbilder ein. Daher sollten alle 3 gleich sein. (das war der, den ich zuerst überprüft habe). Das Lustige ist, dass ich "so" benutzt habe, wie ich gelesen habe, dass "wie" bis zu 5 mal schneller sein sollte. – Offler