Полагаю, вы не понимаете, что говорит вам FxCop, возможно, потому, что его формулировка не идеальна Это означает, что универсальный метод должен предоставлять параметр, который относится к этому типу , а не то, что универсальный метод должен иметь неуниверсальную перегрузку, которая обеспечивает экземпляр Type
времени выполнения , Например,
public void DoSomething<T>(T myParam);
myParam
- это параметр, к которому он относится. Причина, по которой он этого хочет, заключается, как вы предполагаете, в заключении. Это позволяет вам сделать что-то вроде ...
string foo = "bar";
DoSomething(foo);
вместо того, чтобы писать
DoSomething<string>(foo);
В вашем случае нормально отключить предупреждение, поскольку вы хотите, чтобы пользователь явно указал тип. Однако я хотел бы предложить (при условии, что ваши конструкторы не содержат параметров), чтобы вы изменили where
на where T : SomeBaseClass, new()
. Это означает, что он будет указывать компилятору требовать, чтобы любой передаваемый тип имел конструктор без параметров. Это также означает, что вы можете сделать new T()
в своем коде.