[英]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.