J'ai un problème particulier ici. Je veux extraire certains types génériques, qui implémente une interface générique à partir d'un assemblage. Je peux accumuler tous les types de l'assembly, mais je ne peux pas rechercher un type implémenté particulier à partir de cette collection de types. Voici mon code que j'utilise, pouvez-vous s'il vous plaît préciser quel est le problème avec? Ou comment puis-je atteindre l'objectif?Comment extraire des types génériques d'un assemblage?
using System.Reflection;
using System;
using System.Collections.Generic;
namespace TypeTest
{
class Program
{
public static void Main(string[] args)
{
Test<int>();
Console.ReadKey(true);
}
static void Test<T>(){
var types = Assembly.GetExecutingAssembly().GetTypes();
// It prints Types found = 4
Console.WriteLine("Types found = {0}", types.Length);
var list = new List<Type>();
// Searching for types of type ITest<T>
foreach(var type in types){
if (type.Equals(typeof(ITest<>))) {
list.Add(type);
}
}
// Here it prints ITest type found = 1
// Why? It should prints 3 instead of 1,
// How to correct this?
Console.WriteLine("ITest type found = {0}", list.Count);
}
}
public interface ITest<T>
{
void DoSomething(T item);
}
public class Test1<T> : ITest<T>
{
public void DoSomething(T item)
{
Console.WriteLine("From Test1 {0}", item);
}
}
public class Test2<T> : ITest<T>
{
public void DoSomething(T item)
{
Console.WriteLine("From Test2 {0}", item);
}
}
}
Je pense qu'il ya un problème dans l'expression Linq, vous ne pouvez pas utiliser i dans FIGURANT que je n'est pas un délégué c'est un objet Type, non? –
Vous devez utiliser --Any-- au lieu de --Contains--. Mais merci beaucoup de me donner les conseils. –
Correction - J'ai utilisé ma propre méthode d'extension sans réfléchir (trop pratique). Oui, utilisez 'Any' ou' Array.Exists' –