Was ist der beste Weg zu überprüfen, ob das gegebene Objekt eine Liste ist, oder kann es in eine Liste umgewandelt werden?Wie überprüfe ich, ob ein bestimmter Wert eine generische Liste ist?
Antwort
if(value is IList && value.GetType().IsGenericType) {
}
Dies funktioniert nicht - ich bekomme die folgende Ausnahme - Wert ist IList \t Mit dem generischen Typ 'System.Collections.Generic.IList
Sie müssen mit System.Collections; über Ihrer Quelldatei. Die IList-Schnittstelle, die ich vorgeschlagen habe, ist NICHT die generische Version (daher die zweite Überprüfung) –
Sie haben Recht. Das funktioniert wie ein Zauber. Ich habe dies in meinem Watch-Fenster getestet und alles über den fehlenden Namespace vergessen. Ich mag diese Lösung besser, sehr einfach –
Wahrscheinlich der beste Weg, um so etwas zu tun wäre:
IList list = value as IList;
if (list != null)
{
// use list in here
}
Dies wird Ihnen ein Höchstmaß an Flexibilität und ermöglichen es Ihnen auch, mit vielen verschiedenen Arten zu arbeiten, die die IList
-Schnittstelle implementieren.
dies überprüft nicht, ob es eine * generische * liste ist wie gefragt. – Lucas
bool isList = o.GetType().IsGenericType
&& o.GetType().GetGenericTypeDefinition() == typeof(IList<>));
public bool IsList(object value) {
return value is IList
|| IsGenericList(value);
}
public bool IsGenericList(object value) {
var type = value.GetType();
return type.IsGenericType
&& typeof(List<>) == type.GetGenericTypeDefinition();
}
für euch, die die Verwendung von Erweiterungsmethoden genießen:
public static bool IsGenericList(this object o)
{
var oType = o.GetType();
return (oType.IsGenericType && (oType.GetGenericTypeDefinition() == typeof(List<>)));
}
So konnten wir tun:
if(o.IsGenericList())
{
//...
}
Für .Net Core muss dies leicht geändert werden, um 'oType.GetTypeInfo() zurückzugeben. IsGenericType && oType.GetGenericTypeDefinition() == typeof (List <>);' –
Basierend auf Victor Rodrigues 'Antwort können wir eine andere Methode für Generika entwickeln.
public static bool IsGenericList(this object Value)
{
var t = Value.GetType();
return t.IsGenericType && t.GetGenericTypeDefinition() == typeof(List<>);
}
public static bool IsGenericList<T>(this object Value)
{
var t = Value.GetType();
return t.IsGenericType && t.GetGenericTypeDefinition() == typeof(List<T>);
}
- 1. Wie überprüfe ich, ob ein bestimmter Wert in der Auswahlbox
- 2. Wie überprüfe ich, ob eine Liste sortiert ist?
- 3. Wie überprüfe ich, ob eine Region ein Kreis ist?
- 4. Wie überprüfe ich, ob ein Char ein Vokal ist?
- 5. Wie überprüfe ich, ob ein NSTimer läuft?
- 6. Wie sortiere ich eine generische Sammlung mit Blasensortierung und überprüfe, ob sie sortiert ist?
- 7. Wie überprüfe ich, ob eine IsolatedStorageFile existiert?
- 8. Wie überprüfe ich eine Liste in Haskell?
- 9. Wie überprüfe ich, ob ein Textfeld leer ist mit Javascript?
- 10. Überprüfen, ob ein bestimmter Datenattributwert vorhanden ist
- 11. Wie überprüfe ich, ob ein Perl-Modul installiert ist?
- 12. Wie überprüfe ich, ob ein Repository leer ist?
- 13. Chef: Wie überprüfe ich, ob ein Service installiert ist?
- 14. Wie überprüfe ich, ob ein declare Array leer ist?
- 15. Wie überprüfe ich, ob ein bestimmtes USB-Gerät eingesteckt ist?
- 16. Wie überprüfe ich, ob ein Verzeichnis in PHP beschreibbar ist?
- 17. Wie überprüfe ich, ob ein Element nicht definiert ist?
- 18. Wie überprüfe ich, ob ein Powershell-Modul installiert ist?
- 19. Blueprint: Wie überprüfe ich, ob eine optionale Abhängigkeit erfüllt ist?
- 20. Wie überprüfe ich, ob eine Zeichenfolge ein Datum enthält?
- 21. Wie überprüfe ich, ob eine PHP-Sitzung leer ist?
- 22. Wie überprüfe ich, ob eine FormData-Datei leer ist?
- 23. Wie überprüfe ich, ob eine Variable in Swift deklariert ist?
- 24. Wie überprüfe ich, ob eine Austauschverbindung gültig ist? (via ews)
- 25. Wie überprüfe ich, ob eine Umgebungsvariable in PHP gesetzt ist?
- 26. Wie überprüfe ich in Activiti, ob eine Variable gesetzt ist?
- 27. Prüfen, ob ein Objekt eine generische Sammlung ist
- 28. Wie überprüfe ich, ob ein bestimmter Schlüssel auf der Tastatur freigegeben wurde?
- 29. Wie überprüfe ich, ob EditText einen Wert hat?
- 30. Wie kann ich überprüfen, ob ein Wert eine Zahl ist?
Vielleicht finden Sie hier beantworten http://stackoverflow.com/questions/755200/how-do-i-detect-that-an-object: In der Tat kann die ursprüngliche Lösung nur zwei Zeilen reduziert werden -is-a-generic-collection-and-what-types-it-contain –