В JavaScript нередко можно увидеть самозапускаемые функции:
var i = (function(x) {
return x;
})(42);
// i == 42
В то время как я, конечно, не сравниваю языки, я решил, что такая конструкция будет переводимой на С#, при условии поддержки языковой версии:
var i = (delegate(int x) {
return x;
})(42);
Или:
var i = ((x) => {
return x;
})(42);
Или даже:
var i = (x => x)(42);
Однако каждая версия имеет ошибку:
Ожидаемое имя метода
Являются ли самозаверяющие анонимные методы неподдерживаемыми (из-за явного запрета или невозможности ввода типа), или есть ли ошибка в моих попытках?
Я осмеливаюсь предположить, что из-за отсутствия объявления метода (Func<T,T>
), против которого можно было бы вывести типы, он не может сортировать подразумеваемые типы, цифры, которые я хотел назвать объявленным методом по имени, и действительно разобрался в синтаксисе.
Опечатки
Прежде чем этот вопрос залит:
var i = new Func<int, int>(x => x)(42);
Я должен сказать, что я надеялся использовать вывод типа, но я полагаю, что это может быть невозможно из-за чрезмерно неявного.
Итак, немного выяснив вопрос; мы знаем, что мы можем var i = new Func<int, int>(x => x)(42);
, но без создания экземпляра или литья на Func
, возможно ли это?
Use-Case
Для любопытных (или заинтересованных) вариант использования был примерно таким:
var o = new {
PropertyA = () => {
// value computation
}(),
PropertyB = () => {
// value computation
}(),
};