2014-09-01 39 views
6

Bu problemi bir süredir düşünüyorum ve eksik olduğum basit bir çözüm olması gerektiğini düşünüyorum. Ben tip Foo<System.Int32> tüm Kurucular alırsanızJenerik tip tanımında muadili eşleştiriciye eşleştirme

public class Foo<T> 
{ 
    public Foo(T value) 
    { 
    } 

    public Foo(int value) 
    { 
    } 
} 

ben ayırt edilemez tip System.Int32 tek bir parametre ile geri iki kurucular, hem alacak:

ı aşağıdaki sınıf var diyelim.

Tüm kurucular Foo<System.Int32> (Foo<T>) genel tür tanımından alırsa, iki kurucu geri alır. genel parametre T kabul eder Bir ve onun genel tür tanımında onun muadili bir yapıcı eşleştirmek için bir yolu var mı tip System.Int32

// Will return two constructors with signatures that look identical.  
var type = typeof(Foo<int>);  
var ctors1 = type.GetConstructors(); 

// Will return two constructors as well. Parameters can be differentiated. 
var genericTypeDefinition = typeof(Foo<int>).GetGenericTypeDefinition(); 
var ctors2 = genericTypeDefinition.GetConstructors(); 

bir parametre kabul eden bir?

cevap

2

Her iki durumda da ctors'u karşılaştırmak için MetadataToken öğelerini karşılaştırabilirsiniz. Örnek:

foreach (var item in ctors1) 
{ 
    var ctorMatch = ctors2.SingleOrDefault(c => c.MetadataToken == item.MetadataToken); 
} 
+0

Vay. Düşündüğümden çok daha basit. Çok teşekkür ederim! – Patrik

+0

hoşgeldiniz :) – terrybozzio