Est-il possible de déterminer si un objet est une liste générique? Je ne vais pas connaître le type de la liste, je sais juste que c'est une liste. Comment puis-je déterminer cela?Si l'objet est Liste générique
Répondre
Ceci renvoie "True"
List<int> myList = new List<int>();
Console.Write(myList.GetType().IsGenericType && myList is IEnumerable);
-vous soin de savoir si elle est exactement une "liste" ... ou êtes-vous ok avec elle étant IEnumerable, et générique?
Il existe une fonction GetType() dans la classe System.Object. Avez-vous essayé cela?
événement bien que ce soit peut-être pas une réponse « parfaite », je ne vois pas pourquoi il est marqué moins un.Allez les gars, ce n'est pas la meilleure réponse possible mais essayez de ne pas nuire à la réputation de quelqu'un. –
GetType retournera la liste générique spécifique, contrairement au fait qu'il s'agit simplement d'une liste générique. – Dested
Essayez:
if(yourList.GetType().IsGenericType)
{
var genericTypeParams = yourList.GetType().GetGenericArguments;
//do something interesting with the types..
}
La méthode suivante renvoie le type d'élément d'un type de collection générique. Si le type n'implémente pas ICollection <> alors null est renvoyé.
static Type GetGenericCollectionItemType(Type type)
{
if (type.IsGenericType)
{
var args = type.GetGenericArguments();
if (args.Length == 1 &&
typeof(ICollection<>).MakeGenericType(args).IsAssignableFrom(type))
{
return args[0];
}
}
return null;
}
Edit: La solution ci-dessus suppose que le type spécifié a un paramètre générique de son propre. Cela ne fonctionnera pas pour les types qui mettent en œuvre ICollection <> avec un paramètre générique codé en dur, par exemple:
class PersonCollection : List<Person> {}
Voici une nouvelle implémentation qui va gérer ce cas.
static Type GetGenericCollectionItemType(Type type)
{
return type.GetInterfaces()
.Where(face => face.IsGenericType &&
face.GetGenericTypeDefinition() == typeof(ICollection<>))
.Select(face => face.GetGenericArguments()[0])
.FirstOrDefault();
}
La question est ambigüe.
La réponse dépend de ce que vous entendez par liste générique.
Une liste <UnType>?
Une classe qui dérive de la liste <SomeType>?
Une classe qui implémente IList <UnType> (dans ce cas, un tableau peut être considéré comme une liste générique - par exemple int [] implémente IList <int>)?
Une classe qui est générique et implémente IEnumerable (c'est le test proposé dans le accepted answer)? Mais ceci considérera également la classe plutôt pathologique suivante comme étant une liste générique:
.
public class MyClass<T> : IEnumerable
{
IEnumerator IEnumerable.GetEnumerator()
{
return null;
}
}
La meilleure solution (par exemple si vous souhaitez utiliser GetType, IsAssignableFrom, etc.) dépendra de ce que vous voulez dire.
La réponse acceptée ne garantit pas le type de IList <>. Vérifiez cette version, cela fonctionne pour moi:
private static bool IsList(object value)
{
var type = value.GetType();
var targetType = typeof (IList<>);
return type.GetInterfaces().Any(i => i.IsGenericType
&& i.GetGenericTypeDefinition() == targetType);
}
- 1. Comment vérifier si une valeur donnée est une liste générique?
- 2. .NET Casting Liste générique
- 3. Liste déroulante générique
- 4. Liste/Dictionnaire générique
- 5. liste générique divisée
- 6. Convertir DataTable en liste générique?
- 7. liste générique simple en java
- 8. si la liste est Évaluer JSTL vide
- 9. Comment détecter si le type est un autre type générique
- 10. Comment savoir si une propriété est une collection générique
- 11. objet générique à la liste générique en C#
- 12. Liste générique dans une interface
- 13. Liste générique FindAll() vs. foreach
- 14. Conversion d'un type liste non générique en type liste générique en Java 1.5
- 15. Passer la liste générique dans SelectLista
- 16. Initialisation d'une liste générique en C#
- 17. Liaison de liste générique Array à GridView
- 18. Liste générique liée pour Delphi 2009
- 19. Boucle via la liste générique dans vb.net
- 20. Itérer par liste générique en C#
- 21. Rechercher un objet dans la liste générique
- 22. Fonder une collection d'articles d'une liste à une liste générique
- 23. Comment faire pour trier le type de liste générique si plus d'une propriété?
- 24. Comment cloner une liste générique en Java?
- 25. Déterminer si la propriété est Liste générique <of T> par des éléments de réflexion et de liste de boucle
- 26. Stockage Liste générique <CustomObject> en utilisant ApplicationSettingsBase
- 27. Comment puis-je déterminer si une liste est juste une chaîne ou une liste de chaînes?
- 28. Afficher le texte au-dessus de la liste si la liste est vide? (SharePoint 2007)
- 29. Linq to Sql convertir en liste générique dans VB.NET
- 30. Un IList générique n'est-il pas assignable à partir d'une liste générique?
Cela ne compile pas actuellement. https://dotnetfiddle.net/T0Q8w3. Peut-être qu'il l'a fait en 2008. – sonicblis
Hey @sonicblis, "IEnumerable" se trouve dans l'espace de noms "System.Collections". Vous n'aviez pas 'using System.Collections;' dans votre violon. Compile encore en 2016 :) –
@ Timothy_Khouri, ah, l'ai. Merci pour le pointeur. – sonicblis