মনে রাখবেন যে আপনার যদি জেনেরিক ইন্টারফেস থাকে IMyInterface<T>
তবে এটি সর্বদা ফিরে আসবে false
:
typeof(IMyInterface<>).IsAssignableFrom(typeof(MyType)) /* ALWAYS FALSE */
এটিও কাজ করে না:
typeof(MyType).GetInterfaces().Contains(typeof(IMyInterface<>)) /* ALWAYS FALSE */
যাইহোক, যদি MyType
কার্যকরী IMyInterface<MyType>
এই কাজ করে এবং আয় true
:
typeof(IMyInterface<MyType>).IsAssignableFrom(typeof(MyType))
তবে আপনি T
রানটাইমে টাইপ প্যারামিটারটি জানেন না । কিছুটা হ্যাকি সমাধান হ'ল:
typeof(MyType).GetInterfaces()
.Any(x=>x.Name == typeof(IMyInterface<>).Name)
জেফের সমাধানটি কিছুটা কম
typeof(MyType).GetInterfaces()
.Any(i => i.IsGenericType
&& i.GetGenericTypeDefinition() == typeof(IMyInterface<>));
Type
যে কোনও ক্ষেত্রে এটির জন্য একটি এক্সটেনশন পদ্ধতি এখানে রয়েছে :
public static class TypeExtensions
{
public static bool IsImplementing(this Type type, Type someInterface)
{
return type.GetInterfaces()
.Any(i => i == someInterface
|| i.IsGenericType
&& i.GetGenericTypeDefinition() == someInterface);
}
}
(নোট করুন যে উপরেরগুলিতে লিনাক ব্যবহার করা হয়েছে যা সম্ভবত লুপের চেয়ে ধীর)
তারপরে আপনি এটি করতে পারেন:
typeof(MyType).IsImplementing(IMyInterface<>)