Existe-t-il une liste exhaustive de tous les types génériques «base» (non utilisés dans un sens orienté objet mais plus communément) dans le 4.0 .NET Framework? J'ai trouvé this list que j'envoie souvent aux développeurs de niveau plus récent/moyen pour qu'ils puissent comprendre comment les types non génériques correspondent aux types génériques, mais ceci n'est en aucun cas exhaustif. Je cherche quelque chose qui inclut également des choses telles que KeyValuePair<>
, Tuple<>
, et d'autres génériques de base qui peuvent ne pas être très bien connus. Interfaces telles que IObservable<>
serait bien mais pas nécessairement nécessaire.Quels sont tous les types/collections génériques dans le 4.0 .NET Framework?
Répondre
est ici un fragment powershell à la liste tous les types génériques dans les assemblées du système
[AppDomain]::CurrentDomain.GetAssemblies() |
? { $_.FullName -match "^System" -or $_.FullName -match "mscorlib"} |
% { $_.GetTypes() | ? { $_.ContainsGenericParameters } }
Cela pourrait être adapté pour donner une liste plus complète. Si vous chargez powershell w/ a .Net 4 config, vous obtiendrez la liste 4.0.
Count Name
----- ----
1 System.Xml
12 System.Data
67 System
187 mscorlib
325 System.Core
Vous pouvez trouver dans l'espace de noms System.Collections.Generic http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx
Il n'est pas plein, il existe d'autres types et interfaces comme IQueryable
Vous pouvez réfléchir à toutes les assemblées BCL et utiliser la méthode IsGenericType pour obtenir une liste des types génériques.
Dans Visual Studio Ouvrez l'Explorateur d'objets, choisissez .NET Framework 4, la recherche pour IEnumerable<T>
et élargir la liste des types dérivés. C'est beaucoup trop pour coller ici :-).
Cela devrait vous donner quelques réponses:
Le System.Collections.Generic espace de noms fournit la plupart des collections génériques que nous connaissons déjà de .NET 3.5. Il existait déjà trois collections à thread sécurisé:
- SynchronizedCollection Class;
- SynchronizedKeyedCollection Class;
- SynchronizedReadOnlyCollection Class.
L'espace de noms d'espace de noms System.Collections.Concurrent fournit des collections génériques thread-safe.
Voici mon code. Ajoutez plus d'assemblées selon vos désirs.
static void Main(string[] args)
{
Assembly[] assemblies = new Assembly[] {
typeof(string).Assembly,
typeof(Uri).Assembly,
typeof(System.Linq.Enumerable).Assembly};
List<string> final = new List<string>();
Debug.WriteLine("Checked assemblies: ");
foreach (Assembly assembly in assemblies)
{
Debug.WriteLine(assembly.FullName);
Type[] types = assembly.GetTypes();
IEnumerable<Type> genericTypes = types.Where(t => t.IsGenericType && t.IsPublic);
foreach (Type t in genericTypes)
{
final.Add(t.FullName);
}
}
final.Sort();
Debug.WriteLine("Generic classes: ");
foreach (string s in final)
{
Debug.WriteLine(s);
}
}
Résultats:
- ensembles cochés:
- mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089
- Système, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089
System.Core, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089
Classes génériques:
- System.Action`1
- System.Action`10
- System.Action`11
- System.Action`12
- System.Action`13
- System.Action`14
- System.Action`15
- System.Action`16
- System.Action`2
- System.Action`3
- System.Action`4
- System.Action`5
- System.Action`6
- System.Action`7
- System.Action`8
- System.Action`9
- System.ArraySegment`1
- System.Collections.Concurrent.BlockingCollection`1
- System.Collections.Concurrent.ConcurrentBag`1
- System.Collections.Concurrent.ConcurrentDictionary`2
- System.Collections.Concurrent.ConcurrentQueue`1
- System.Collections.Concurrent.ConcurrentStack`1
- System.Collections.Concurrent.IProducerConsumerCollection`1
- System.Collections.Concurrent.OrderablePartitioner`1
- System.Collections.Concurrent.Partitioner`1
- System.Collections.Generic.Comparer`1
- System.Collections.Generic.Dictionary`2
- System.Collections.Generic.EqualityComparer`1
- System.Collections.Generic.HashSet`1
- System.Collections.Generic.ICollection`1
- System.Collections.Generic.IComparer`1
- System.Collections.Generic.IDictionary`2
- System.Collections.Generic.IEnumerable`1
- System.Collections.Generic.IEnumerator`1
- System.Collections.Generic.IEqualityComparer`1
- System.Collections.Generic.IList`1
- System.Collections.Generic.ISet`1
- System.Collections.Generic.KeyValuePair`2
- System.Collections.Generic.LinkedList`1
- System.Collections.Generic.LinkedListNode`1
- System.Collections.Generic.List`1
- System.Collections.Generic.Queue` 1
- System.Collections.Generic.SortedDictionary`2
- System.Collections.Generic.SortedList`2
- System.Collections.Generic.SortedSet`1
- System.Collections.Generic.Stack`1
- System.Collections.ObjectModel.Collection`1
- System.Collections.ObjectModel.KeyedCollection`2
- System.Collections.ObjectModel.ObservableCollection`1
- System.Collections.ObjectModel.ReadOnlyCollection`1
- System.Collections.ObjectModel.ReadOnlyObservableCollection`1
- System.Comparison`1
- System.ComponentModel.BindingList`1
- System.Conv erter`2
- System.EventHandler`1
- System.Func`1
- System.Func`10
- System.Func`11
- System.Func`12
- System.Func` 13
- System.Func`14
- System.Func`15
- System.Func`16
- System.Func `17
- System.Func`2
- System.Func`3
- System.Func`4
- System.Func`5
- System.Func`6
- System.Func`7
- System.Func`8
- System.Func`9
- System.IComparable`1
- System.IEquatable`1
- System.IObservable`1
- System.IObserver`1
- System.Lazy`1
- System.Linq.EnumerableExecutor`1
- System.Linq.EnumerableQuery`1
- System.Linq .Expressions.Expression`1
- System.Linq.IGrouping`2
- System.Linq.ILookup`2
- System.Linq.IOrderedEnumerable`1
- System.Linq.IOrderedQueryable`1
- System.Linq.IQueryable`1
- System.Linq.Lookup`2
- System.Linq.OrderedParallelQuery`1
- System.Linq. ParallelQuery`1
- System.Nullable`1
- System.Predicate`1
- System.Runtime.CompilerServices.CallSite`1
- Sy stem.Runtime.CompilerServices.ConditionalWeakTable`2
- System.Runtime.CompilerServices.ReadOnlyCollectionBuilder`1
- System.Runtime.CompilerServices.RuleCache`1
- System.Runtime.CompilerServices.StrongBox`1
- système. Security.AccessControl.AccessRule`1
- System.Security.AccessControl.AuditRule`1
- System.Security.AccessControl.ObjectSecurity`1
- System.Threading.Tasks.Task`1
- System.Threading.Tasks.TaskCompletionSource`1
- System.Threading.Tasks.TaskFactory`1
- System.Threading.ThreadLocal`1
- System.Tuple`1
- System.Tuple`2
- System.Tuple`3
- System.Tuple`4
- System.Tuple`5
- System.Tuple`6
- Syste m.Tuple`7
- System.Tuple`8
Peut-être que nous pourrions écrire tous les médicaments génériques que nous supposerons utiles que les réponses ci-dessous? Et vous générez une liste de types à partir des réponses? –
Malheureusement, ce que vous demandez doit être mieux défini. 'KeyValuePair <>' et 'Tuple <>' ne sont pas des types de collection (bien que 'KeyValuePair' soit étroitement associé à' Dictionary <> '). 'IObservable' n'est pas non plus une interface de collection, bien que' ObservableCollection 's'en serve. Voulez-vous des types comme 'IQueryable', qui ne représentent pas une collection mais un référentiel (de taille indéfinie) sur lequel vous pouvez lancer des requêtes? –