簡體   English   中英

使用C#4.0中的默認值反映構造函數

[英]Reflecting constructors with default values in C#4.0

我剛開始使用C#4.0(RC)並提出了這個問題:

class Class1 { public Class1() { } }
class Class2 { public Class2(string param1) { } }
class Class3 { public Class3(string param1 = "default") { } }

Type[] types = new Type[] { typeof(Class1), typeof(Class2), typeof(Class3) };

// Problem starts here, main-method
for(int i = 0; i < types.Length; i++)
{
    ConstructorInfo ctr = provider.GetConstructor(Type.EmptyTypes);
    Console.WriteLine(ctr == null ? "null" : ctr.Name);
}

注意,我從來沒有嘗試過這個實際的代碼,但我剛剛看了一下在VS2010中使用調試來做GetConstructor的結果

這對於兩個第一類(1和2)是完美的,第一個類打印Class1的無參數構造函數的實際ConstructorInfo對象的名稱,第二個類打印為null。 然而,問題出現在第三個問題上,因為我真正想要的是不知道它是否需要0個參數,但是我是否可以創建一個沒有任何參數的類的實例。 我怎么做?

我找到了辦法。 它不漂亮,但它的工作原理。

var ctrs = from c in provider.GetConstructors()
           where c.GetParameters().Where(p => !p.IsOptional).Count() == 0
           select c;
ConstructorInfo ctr = ctrs.FirstOrDefault();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM