используя предложение where + новое ограничение с аргументами? - PullRequest
1 голос
/ 01 декабря 2009

У меня есть кусок кода, который выглядит следующим образом:

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

и теперь мне нужно изменить код, чтобы я мог передать конструктору SomeMicrosoftBaseClass логический аргумент - который я могу установить только при конструировании.

, так как для ограничения "new ()" требуется открытый конструктор без параметров, и поскольку я не мог использовать интерфейс или изменять SomeMicrosoftBaseClass, я использую отражение следующим образом:

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

Кто-нибудь может предложить более элегантный способ сделать это?

1 Ответ

2 голосов
/ 01 декабря 2009

Возможно, вы можете использовать Activator.CreateInstance :

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