2010-08-18 21 views
6

Ben varsayılan bir parametresi olan bir yöntemi vardır:Genel türleri COM'a nasıl verilir? Tür kitaplığı exporteder bir imza bir genel tür örneği karşılaştı

Tipi kütüphane ihracatçısı:

void Test(int? iRange = null); 

COM benim sınıf teşhir etmeye çalışıyor, bir uyarı olsun bir imzadaki genel bir örnekle karşılaştı. Genel kod COM'a verilmeyebilir. Bu yöntemin nasıl ortaya çıktığı belli midir?

Düzenleme Üzgünüm, ben bu ben yanlış orijinal yöntem imzası kopyalanan null parametresi (değil varsayılan parametre) ile ilgisi olduğunu düşünüyorum.

+0

Varsayılan parametreler veya genel türler veya her ikisi hakkında sorunuz mu var? –

+0

Hatam ... parametrenin "int iRange" değil "int? IRange" olması gerekir. Sorun, jenerik olan null türüyle ilgilidir. – Jeremy

cevap

9

Birkaç yıl önce böyle bir şeye rastladım, COM jenerikleri desteklemiyor ve COM'a maruz kaldığınız her şey jenerik ücretsiz olmalı.

Bu durumda "int? IRange", "Null <int> iRange" için kestirme işlemdir ve bu nedenle hataya neden olur. İfade etmek için null kullandığınız her şeyi ifade etmenin başka bir yolunu bulmanız gerekebilir. Başka bir argüman ekleyebilir veya iRange'ın başka bir kullanılmamış değerini kullanabilirsiniz (0, -1 ve int.MinValue olasılık olarak akla gelir - bu seçeneği seçerseniz değeri bir const olarak önermenizi öneririm).

İlgili konular