2017-02-03 21 views
5

ayırt:bir sınıf genel tür parametresi ve şu örnek sınıf Verilen yöntem genel tür parametresi

class Foo<T> 
{ 
    void Bar<S>(T inputT, S inputS) 
    { 
    // Some really magical stuff here! 
    } 
} 

Ben yöntemle Foo<>.Bar<>(...) karşı yansıtan ve parametre türlerini inceleyerek am mı ki:

var argType1 = typeof(Foo<>).GetMethod("Bar").GetParameters()[0].ParameterType; 
var argType2 = typeof(Foo<>).GetMethod("Bar").GetParameters()[1].ParameterType; 

hem argType1 ve argType2 benzer:

  • FullName özelliği null
  • Name özelliği "T" veya sırasıyla "S" olduğu
  • IsGenericParameter

beni ilk argüman tanımlandığını ayırt etmenizi sağlar parametre tipi bilgilerinde şey var mı doğrudur tip-düzeyinde, ikinci argüman ise metot düzeyinde bir tip parametresi midir?

+1

'DeclaringType' ve' DeclaringMethod' – PetSerAl

cevap

3

Öyle gibi varsayalım:

public static bool IsClassGeneric(Type type) 
    { 
     return type.IsGenericParameter && type.DeclaringMethod == null; 
    } 

Ve kodunda:

class Program 
{ 
    static void Main(string[] args) 
    { 
     new Foo<int>().Bar<int>(1,1); 
    } 

    class Foo<T> 
    { 
     public void Bar<S>(T a, S b) 
     { 
      var argType1 = typeof(Foo<>).GetMethod("Bar").GetParameters()[0].ParameterType; 
      var argType2 = typeof(Foo<>).GetMethod("Bar").GetParameters()[1].ParameterType; 

      var argType1_res = Ext.IsClassGeneric(argType1);//true 
      var argType2_res = Ext.IsClassGeneric(argType2);//false 
     } 

    } 
} 
İlgili konular