in c#, wie um zu bestimmen, den Typ des Objekts, wenn List<Object> gegeben ist?
meine Methode so Aussehen:
Boolean actions(List<Object> input)
{
if (input.element is String)
{...}
else if (input.element is PSObject)
{...}
}
Versuchte ich input.getType().GetGenericArguments()[0] == new PSObject().GetType())
aber input.getType().GetGenericArguments()[0]
sagt, es ist Objekt Typ...
- Also, was ist falsch mit dem aktuellen code und den
is
? Der generische Typ,X
imList<X>
istObject
in diesem Fall ist der statische Typ bekannt, bei der Kompilierung. - -1 (Kann korrigiert werden) Geben Sie den zutreffenden Fehlermeldungen/Indikatoren.
InformationsquelleAutor jamesdeath123 | 2013-03-15
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht ist Ihr problem ist nur, dass Sie versuchen, zu verwenden
input.element
zu bekommen ein Element aus der Liste. Das ist nicht der richtige Weg, um überprüfen Sie den Typ eines Elements in der Liste.Nutzen Sie einfach dieses zu testen, den ersten Punkt nur:
Oder diese zu testen, jedes Element einzeln:
Oder wenn Sie wollen,, um sicherzustellen, dass alle Elemente einer Liste eines bestimmten Typs, die Sie verwenden können, Generika:
List<object>
.PSObect
, so würde dies müssen sehr gezielt eingesetzt. Wenn das eine Einschränkung, die Sie wollten, dann sollte die Methode generisch sein.List<object>
Prüfung und geben Sie für jedes Element, das ist, was Sie tun müssen (es sei denn, Sie verwenden eine Schnittstelle).Haben Sie, um den Typ der Instanzen in der Liste, nicht der Typ der Liste.
Alternativ, wenn Sie wissen, dass alle Objekte in der Liste sind vom gleichen Typ sind, könnten Sie überprüfen Sie den Typ des ersten Elements (
input[0]
) und dann das gleiche tun für alle Artikel, je nach dass.Gut, wie
List<T>
invariant ist, das generische argument die Liste übergeben wird immer match das generische argument des Parameters der Methode, genau.In diesem Fall, wird die Liste immer eine Liste der
object
s.Nun, jedes Element in der Liste kann nicht sein, eine
object
(wie es die meisten abgeleiteten Typ) kann ein string sein, oder einPSObject
. Doch man kann nicht davon ausgehen, dass alle von Ihnen sind keinem anderen Typ alsobject
.So könnte man überprüfen, ob es einen mehr abgeleiteten Typ für ein bestimmtes Element in der Liste, aber nicht die Liste als ganzes.
Es ist also mehr wahrscheinlich, dass Sie haben, Refactoring der code dazu:
Wenn es wichtig ist, für alle Elemente des gleichen Typs, dann können Sie Generika:
List<T>
invariant ist, ist nichttypeof(T)
immertypeof(object)
wenn Eingang warList<object>
?List<object>
Sie sein kann und soll, übergeben eine Liste der ein mehr abgeleiteten Typ, das ist die Idee, dass insbesondere der Umsetzung.