Я до сих пор не на 100% понимаю, что вы ищете здесь, но я попробую.
Я предполагаю, что вы хотите создать делегат, который вызывает конструктор класса, возвращая новый экземпляр этого класса. Тривиальный способ сделать это:
var makeX = new Func<String, Integer, X>((s,i)=>new X(s,i));
// To use it
var myX = makeX("Foo", 5);
Я не уверен, почему это не «приемлемо» в вашем случае использования. Если вы можете указать на конкретные технические или синтаксические проблемы с этим подходом, я постараюсь их решить.
EDIT:
Предполагая, что допустимо предопределить ваших собственных делегатов:
delegate X makeX(String s, Integer i);
тогда вы можете сделать:
var myMakeX = new makeX((s,i)=>new X(s,i));
// To use it
var myX = myMakeX("Foo", 5);
Но я подозреваю, что это как можно меньше. Теперь, если вы заранее знаете, что, например, все время хотите указать «Foo» в качестве значения для s
, то вы можете создать другой делегат, который это замыкает (используя технику, называемую * 1017). * Выделка ):
var myCurryMaker = new Func<String, Func<Integer, X>>(s => return new Func<Integer, X>(i => new X(s, i)));
var myCurriedX = myCurryMaker("Foo");
// To use it
var myX = myCurriedX(5);