Как в Action использовать ключевое слово return ?

Pruvetik
Дата: 03.06.2014 18:40:11
Вопрос странный наверное.

Имеется метод, принимающий простой Action.

Хочу написать просто:
private int Process ()
{
Action act = () => { ...вычисляем... return result; }; // Хочу, чтобы результат вернулся сразу из Process
MyObj.Func (act);
}


Но ловлю ошибку
"System.Action" возвращает значение void, поэтому после ключевого слова return не должно присутствовать выражение объекта


Я конечно могу написать так
int i = 0;
Action act = () => {i = 5; };
MyObj.Func (act);
return i;


Но можно как-то все же первым вариантом ? Второй вариант мне кажется довольно громоздким.
Изопропил
Дата: 03.06.2014 18:46:34
Pruvetik,

А где гарантия, что MyObj.Func вызывает act синхронно?
bazile
Дата: 03.06.2014 18:48:00
Pruvetik, используй Func<int>
Где-то в степи
Дата: 03.06.2014 19:09:51
Pruvetik,
автор
Как в Action использовать ключевое слово return ?

Да никак
Pruvetik
Дата: 03.06.2014 19:13:34
bazile,

Спасибо.
Получилось так:
return MyObj.MyFunc<int>(() => { ...; return result; });

В вполне компактно.

Изопропил,
О синхронизации я позаботился, этим как раз MyObj.MyFunc и занимается в блоках try finally (внутри себя). Все ок. Спасибо за предупреждение :)
Где-то в степи
Дата: 04.06.2014 11:10:17
чем отличаются out и ref?
pation
Дата: 04.06.2014 18:40:02
Pruvetik
Вопрос странный наверное.

Имеется метод, принимающий простой Action.

Хочу написать просто:
private int Process ()
{
Action act = () => { ...вычисляем... return result; }; // Хочу, чтобы результат вернулся сразу из Process
MyObj.Func (act);
}



Но ловлю ошибку
"System.Action" возвращает значение void, поэтому после ключевого слова return не должно присутствовать выражение объекта



Я конечно могу написать так
int i = 0;
Action act = () => {i = 5; };
MyObj.Func (act);
return i;



Но можно как-то все же первым вариантом ? Второй вариант мне кажется довольно громоздким.


private int Process ()
{
Func act = () => { ...вычисляем... return result; }; // Хочу, чтобы результат вернулся сразу из Process
MyObj.Func (act);
}
pation
Дата: 04.06.2014 18:41:16
pation
Pruvetik
Вопрос странный наверное.

Имеется метод, принимающий простой Action.

Хочу написать просто:
private int Process ()
{
Action act = () => { ...вычисляем... return result; }; // Хочу, чтобы результат вернулся сразу из Process
MyObj.Func (act);
}




Но ловлю ошибку
"System.Action" возвращает значение void, поэтому после ключевого слова return не должно присутствовать выражение объекта




Я конечно могу написать так
int i = 0;
Action act = () => {i = 5; };
MyObj.Func (act);
return i;




Но можно как-то все же первым вариантом ? Второй вариант мне кажется довольно громоздким.


private int Process ()
{
Func act = () => { ...вычисляем... return result; }; // Хочу, чтобы результат вернулся сразу из Process
MyObj.Func (act);
}


сорь написал на коленке, правильно будет:
private int Process ()
{
Func<возвращаемый тип> act = () => { ...вычисляем... return result; }; // Хочу, чтобы результат вернулся сразу из Process
MyObj.Func (act);
}
Где-то в степи
Дата: 04.06.2014 19:02:41
pation,
я так понял что MyObj.Func void.. return из Process () надо?