Ich verwende eine abgeleitete Klasse und übergebe die Basisklasse mit dem Schlüsselwort as. Wenn ich dies tue, wird der abgeleitete Klassenkonstruktor aufgerufen, und seine Objekte werden initialisiert, aber die abgeleitete Instanz endet nicht mit den initialisierten Objekten (hat Nullen). Hier ist ein Codebeispiel.Objektinitialisierungen gehen durch Verwendung des Schlüsselwortes "as" verloren.
// classes
public class Request
{
public Request();
public Header Header{get;set;}
}
public class CreateRequest : Request
{
public Foo Foo{get;set;}
public Bar Bar{get;set;}
public CreateRequest():base()
{
this.Foo = new Foo();
this.Bar = new Bar();
}
}
public class SomeClass
{
private Response ProcessCreateRequest(Request request)
{
// request comes from a json request
CreateRequest createRequest = request as CreateRequest;
// values of Foo and Bar are null
[...]
}
}
Ist das Problem, dass „als“ normalerweise für derived-> Base verwendet wird und Base- nicht> abgeleitet oder ist es etwas anderes, bei der Arbeit hier?
+1 Sie sind richtig, 'as' nur wirft - keine Konstruktoren werden aufgerufen. –
Was ich verifiziert habe, ist, dass der Konstruktor getroffen wird. Was ich eigentlich zu lösen versuche, ist ein Fall, in dem eine Anfrage ohne alle angegebenen Körperparameter eingeht. Das bringt mich um, da ich in die Objektstruktur geriet, wo ein hereinkommender Nullwert ein Null-Objekt bedeutet, das beim Zugriff auf Mitglieder mit dem Auslösen von Ausnahmen beginnt. Ich kann die Nullen fangen, nachdem ich gecastet habe, aber es scheint, als sollte es einen Weg geben, sich eleganter darum zu kümmern. – TahoeWolverine
Sie sollten prüfen, ob der JSON-Deserialisierer ordnungsgemäß funktioniert.Also zumindest eine Ausnahme für eine unvollständige Anfrage werfen. – user7116