Что вы пытаетесь сделать, это вернуть свою функцию раньше, в другой функции. Это невозможно. Это не значит, что вытащить IsNull
невозможно, но непрактично. Возможным решением может быть
public ActionResult isNull(int? id, Func<ActionResult> _else) {
if (id == null) {
return RedirectToAction("Index");
} else {
return _else();
}
}
, который можно было бы назвать как
public ActionResult Join(int? id){
Func<ActionResult> ifNotNull =() => {
//do whatever you want here, in your case
return View();
}
return isNull(id, ifNotNull);
}
или непосредственно
public ActionResult Join(int? id){
return isNull(id,() => View());
}
ли это хорошая идея, это другой вопрос.
Вы, вероятно, хотите использовать Id в этом, хотя, так что вы получите что-то вроде
public ActionResult isNull(int? id, Func<int, ActionResult> _else) {
if (id == null) {
return RedirectToAction("Index");
} else {
return _else(id.value);
}
}
Вы могли бы абстрактные, что из далее
public ActionResult isNull<T>(T id, Func<T, ActionResult> _else) where T: class {
if (id == null) {
return RedirectToAction("Index");
} else {
return _else(id);
}
}
и
public ActionResult isNull<T>(Nullable<T> id, Func<T, ActionResult> _else) {
if (id == null) {
return RedirectToAction("Index");
} else {
return _else(id.value);
}
}
, но к настоящему времени мы определенно оставили царство хороших идей.
RedirectToAction («Index») должен быть возвращен в Join, что означает, что IsNull также должен будет вернуть его, что делает его несколько избыточным. Я считаю, что лучше всего придерживаться If (id == null) return RedirectToAction («Index»), там нет достаточной сложности, чтобы заслужить отдельный метод для этого, на мой взгляд. –
Насколько я считаю, вы не можете использовать 'RedirectToAction' без возвращаемого типа (ActionResult). –
У вас все хорошо. Абстрагирование здесь не кажется хорошей идеей (но см. Некоторые ответы для работы, если несколько запутанные решения) – Martijn