Я читал this вопрос, где один ответил предлагает этот метод:Определение делегата план
public static void Method<T>(Func<int,T> del) {
var t = del(42);
}
Какие должны быть использованы следующим образом: Method<SomeType>(x => new SomeType(x));
Method
тело не важно на этот вопрос. Если делегат/лямбда не находится в этом «стиле», метод не будет работать должным образом. Например, если он вызван как Method(x => new Foo());
, он не будет «работать», потому что цель обходного пути будет потеряна.
Целью является обеспечение, что T
имеет конструктор, принимающий 1 параметр типа int
. Хотел бы я сделать T(int)
Так или иначе, чтобы гарантировать, что делегат должен всегда быть x => new SomeType(x)
? Или есть альтернатива? Я искал много мест и ничего не могу придумать.
Вы можете создать перегрузки для метода, который принимает любое количество ожидаемых параметров. –
Да, я могу заставить 'Method' взять T и int, но как он создаст' Foo'? 'Foo' не известен методу. Предположим, что 'Method' находится в другой библиотеке. –
Нет, я имею в виду создание другого 'Method (Func del)', который перегрузил бы другой, так что вы могли бы назвать его одним из них. Поскольку вы не можете заставить существующего принять 'Func ', потому что он ожидает 'Func '. –