Вы можете сделать:
@{
Func<dynamic, object> a = (true ?
(Func<dynamic, object>)(@<text> Works1 </text>)
: (Func<dynamic, object>)(@<text> Works2 </text>));
@a(new object());
}
Или сделать его встроенным:
@(
((Func<dynamic, object>)(true == false
? (Func<dynamic, object>)(@<text> Works2 </text>)
: (Func<dynamic, object>)(@<text> Works3 </text>)))
(new object())
)
(Обратите внимание, что все вышеперечисленное будет работать и в одной строке, я только что отделилдля ясности)
Однако первоначальное намерение ФП также может быть изменено для работы, но разрывы этой временной линии должны быть сохранены:
@(((Func<dynamic, object>)( true == true ? (Func<dynamic,object>)(@: Works
): (Func<dynamic, object>)(@: Not Works
)))("").ToString())
Примечание
На самом деле вам нужен приведение только к одной из опций в операторе, а также вам не нужно указывать динамику в качестве первой опции для Func, вы можете дать что угодно, и то же самое при оценке вашегоможет дать что-нибудь, если оно соответствует первому аргументу Func.
Например, вы можете сделать следующее (я думаю, что это самая короткая версия):
@(
((Func<int, object>)(true == false
? (Func<int, object>)(@<text> Works2 </text>)
: @<text></text>))
(0)
)
Если вы используете егомного, было бы хорошей идеей наследовать Func как в
public class Razor : Func<dynamic, object>{}
Или можно даже написать метод-обертку (или даже лямбда-выражение в этом случае [я не уверен, но это возможно)использовать обычный троичный оператор и отложить приведение к окиль) для троичного оператора.