Déterminer si un type implémente un type d'interface générique à partir d'un type mutilé
Les interfaces et classes génériques permettent une grande flexibilité et une grande sécurité de type dans code, mais travailler avec et les inspecter peut être quelque peu fastidieux. Dans cet article, nous aborderons un problème spécifique : déterminer si un type implémente une interface générique lorsque seul le type mutilé est disponible.
Pour donner un exemple, considérons les définitions de type suivantes :
public interface IFoo<T> : IBar<T> {} public class Foo<T> : IFoo<T> {}
La question est de savoir comment pouvons-nous déterminer si le type Foo
La façon couramment suggérée de gérer cette situation consiste à utiliser la réflexion. Voici comment vous pouvez l'aborder :
// Assume a mangled type 'typeof(Foo)' is provided. Type fooType = typeof(Foo); // Check if 'Foo' implements the generic interface 'IBar<T>'. bool isBar = fooType.GetInterfaces().Any(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IBar<>)); Console.WriteLine(isBar);
Cette requête LINQ inspecte les interfaces implémentées par Foo, en se concentrant uniquement sur les interfaces génériques. Si l'une de ces interfaces génériques correspond à la définition de IBar<>, elle renvoie vrai.
En tirant parti de cette approche, vous pouvez déterminer efficacement si un type implémente une interface générique spécifique, même lorsqu'il s'agit de types mutilés, fournissant des informations précieuses pour vos besoins d'introspection et d'analyse de type.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!