Domanda

Ho un pezzo di codice simile al seguente:

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

e ora ho bisogno di cambiare il codice in modo da poter passare al costruttore di SomeMicrosoftBaseClass un argomento booleano - che posso solo impostare sulla costruzione.

dal momento che " new () " il vincolo richiede un costruttore pubblico privo di parametri e poiché non potevo usare un'interfaccia o modificare SomeMicrosoftBaseClass, sto usando la riflessione in questo modo:

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

qualcuno può suggerire un modo più elegante per farlo?

È stato utile?

Soluzione

Forse puoi usare Activator.CreateInstance :

var newElement = (T)Activator.CreateInstance(typeof(T),a);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top