2009-12-01 8 views
1

J'ai un morceau de code qui ressemble à ceci:en utilisant la clause where + nouvelle contrainte avec args?

public static T CreateSomething<T>(SomeType a) where T : SomeMicrosoftBaseClass, new() 
    { 
     var newElement = new T { SomeProperty = a}; 
     DoStuff(); 
     return newElement; 
    } 

et maintenant je dois changer le code pour que je puisse passer au constructeur de SomeMicrosoftBaseClass un argument booléen - que je ne peux mettre sur la construction.

depuis la « nouvelle() » contrainte nécessite un paramètre moins public constructeur, et que je ne pouvais pas utiliser une interface ou modifier SomeMicrosoftBaseClass, j'utilise la réflexion comme ceci:

var newElement = (T) (typeof (T).GetConstructor(new Type[] { typeof(SomeType) }).Invoke(new object[] { a })); 

quelqu'un peut-il suggérer une manière plus élégante de faire ceci?

Répondre

2

Peut-être que vous pouvez utiliser Activator.CreateInstance:

var newElement = (T)Activator.CreateInstance(typeof(T),a); 
+0

juste être conscient Activate.CreateInstance est incroyablement lent par rapport à la nouvelle() – JTtheGeek