2010-03-09 35 views
5

Acabo de empezar con C# 4.0 (RC) y llegar a este problema:constructores con valores por defecto en C# 4.0

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); 
} 

Nota, nunca he probado este código real, pero acabo de ver los resultados de hacer GetConstructor usando la depuración en VS2010

Esto es perfecto para las dos primeras clases (1 y 2), la primera imprime el nombre de un objeto ConstructorInfo del constructor sin parámetros de Clase 1, la segunda imprime nula. Sin embargo, el problema surge con el tercero, porque lo que realmente quiero es no saber si toma 0 parámetros o no, pero es si I puede crear una instancia de la clase sin ningún parámetro. ¿Cómo puedo hacer eso?

Respuesta

2

Encontré una manera de hacerlo. No es bonito, pero funciona.

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