C#: Objekt zurückgeben?

3 Antworten

1) Diese Abfrage kommt ein bisschen spät, findest du nicht? 😉

var typ = value.GetType();

if (value != null)
{
  // ...

2) So wie ich das sehe, ist ClassOne doch ein Typ / eine Klasse, und kein Objekt?

Ein Aufruf könnte so aussehen:

Object someObject = // create some object ...
ClassOne a = Example.Open(someObject);

Wobei nicht gesichert wäre, dass du stets ein richtiges Objekt zurückbekommst, so wie du es erwartest.

regex9  15.12.2019, 19:55

PS.: Eigentlich ließe sich dein Code auf Folgendes reduzieren:

public object Open(Type type)
{
  return type == typeof(ClassOne) ? Liste[Liste.Count - 1] : Liste2[Liste2.Count - 1];
}
0
regex9  15.12.2019, 19:58
@regex9

Oder:

public object Open(object value)
{
  if (value == null)
  {
    return null;
  }

  return value.GetType() == typeof(ClassOne) ? Liste[Liste.Count - 1] : Liste2[Liste2.Count - 1];
}
0

Die Fehlerursache verwundert mich, da in C# Klassen keine "Bürger erster Klasse" (nennt man tatsächlich so) sind, in

 ClassOne a = Example.Open(ClassOne);

aber eine Klasse wie ein Objekt verwendet wird.

Möglicherweise funktioniert es, wenn du zuerst ein Dummy-Objekt der Klasse ClassOne erzeugst und auf dieses zugreifst:

 ClassOne a = new ClassOne();
 a = Example.Open(a);

aber das ist ziemlich unelegant. Eleganter ist es, die Methode Open umzuschreiben oder zu "überladen", sodass sie einen Typ als Argument nimmt:

public Object Open(Type type) {
  ...
}

-----

Übrigens solltest du unbedingt vorher noch die Abfrage, ob value != null ist, nach oben verschieben, bevor value.GetType() aufgerufen wird. Auch, wenn du den Code danach nie wieder verwendest. Man kann sich nicht zu früh angewöhnen, rechtzeitig auf == null oder != null zu prüfen.

Woher ich das weiß:Berufserfahrung – Software-Entwickler

Bin zwar kein C# Profi, aber

ClassOne a = Example.Open(ClassOne);

Du versuchst ein Objekt anzugeben, das anscheinend null ist bzw. nicht richtig deklariert ist und deshalb nicht bekannt ist???

Example.Open(ClassOne);