ما هي الطريقة الأسهل لمعرفة ما إذا كان هناك معلمة نوع تقوم بتنفيذ واجهة في c # 2.0؟

على سبيل المثال ، بالنظر إلى طريقة param type ، فأنا أبحث عن شيء مثل الجزء بخط غامق

void MyMethod< T >() {
if ( typeof(T).Implements( IMyInterface ) ) {

  //Do something   

else

  //Do something else 

}

نرحب أيضًا باستخدام Anwers باستخدام C# 3.0 ، ولكن قم أولاً بإفلات .NET 2.0 من فضلك ؛)

0
وأضاف تحرير
الآراء: 7

3 إجابة

لقد حاولت فقط باستخدام

if( typeof(T).Equals(typeof(IMyInterface) ) 
     ...

ويعمل أيضًا ، ولكن إجابتك تبدو أكثر قوة وما كنت أبحث عنه. شكر!

0
وأضاف
عملت بالنسبة لي في حالتي الخاصة ، ولكن السلوك هو الذي تصفه: لا يعمل إذا كنت تريد معرفة ما إذا كان كائن يقوم بتنفيذ IMyInterface ، ولكن لتأكيد أن النوع T هو واجهة IMYInterface. شكرا على التصحيح!
وأضاف المؤلف Ricardo Amores, مصدر
نعم هو كذلك؟ يجب أن تعمل فقط من T بشكل خاص IMyInterface
وأضاف المؤلف James Curran, مصدر

أعتقد

if (typeof (IMyInterFace).IsAssignableFrom(typeof(T))

يجب أن تعمل أيضًا: لكن لا أرى ميزة ...

0
وأضاف

Type.IsAssignableFrom

if(typeof(IMyInterface).IsAssignableFrom(typeof(T)))
{
 //something
}
else
{
 //something else
}
0
وأضاف