2012-04-08 4 views
0

Ich erhalte Daten von einem dynamisch aktualisierenden JSON. Es enthält zu einem bestimmten Zeitpunkt ein Objekt vom Typ X und zu einem anderen Zeitpunkt ein Array von Objekten vom Typ X. Ich brauche eine Elternklasse Y, die in jeder der oben genannten Situationen funktionieren könnte. Und auch der Objektname: x bleibt gleich.Gibt es eine Möglichkeit, ein Objekt und ein Array von Objekten mit demselben Namen und derselben Klassendefinition zu haben?

class Y 
{ 
    public X x { get; set; } 
    public X[] x { get; set; } 
} 
class X 
{ 
    public int a { get; set; } 
} 

Dies zeigt einen Fehler: der Typ Y bereits eine Definition für x enthält
Gibt es eine Möglichkeit, es zu tun ??

+1

Was bedeutet das überhaupt? Was würde obj.x lösen? –

Antwort

0

Der Grund, warum Sie den Fehler erhalten, ist C# erlaubt keine Variable von zwei Typen mit dem gleichen Namen.

Sie können

SomeMethod() 
{ 
    int x = 0; 
    string x = "something"; 
} 

nicht erklären Wenn ich Sie wäre, würde ich die folgende wahrscheinlich tun.

class Y 
{ 
    public List<X> listOfX{get; set;} 
} 
class X 
{ 
    public int a { get; set; } 
} 

Sie können eine Liste haben. Wenn es nur ein Element gibt, dann gibt es eine Liste von Element der Größe 1.

0

Die C# -Spezifikation besagt, dass Member eines Typs einen eindeutigen Namen haben müssen (der vermutlich mehrdeutige Memberreferenzen verhindert). Siehe http://msdn.microsoft.com/en-us/library/aa691137(v=vs.71).aspx, insbesondere:

Because every member of a namespace or type must have a unique name, it follows that the fully qualified name of a namespace or type is always unique.

0

Sie das Schlüsselwort dynamic verwenden kann, wenn Sie ein Attribut mit dem Namen x benötigen einen einzigen Wert vom Typ X zu einer Zeit zurückzukehren, und eine Reihe von X auf einem anderen.

class Y 
{ 
    public dynamic x { get { return IfMonday() ? new X() : new X[100]; set; } 
} 
+0

Danke, aber es hilft mir nicht. Gibt es eine Möglichkeit in C# zu überprüfen, ob eine Variable ein Objekt oder ein Array ist? Damit ich es anstelle von IfMonday() benutzen kann .... So etwas wie php's bool is_array() ?? – anurag

+0

Meinst du bool b = (x ist T []); ? – cdiggins

Verwandte Themen