Добрый день, коллеги.
Перехожу на Framework 4 и не могу понять некоторых особенностей работы с dynamic
При выполнении следующего кода возникает ошибка: An expression tree may not contain a dynamic operation
@grid.GetHtml(
columns: grid.Columns(
grid.Column(null, null, format: item =>
{
return Html.ActionLinkWithImage<ClientRecordController>(c => c.ClientRecordIndex(0, item.Id, null), "~/Content/Images/users.png", new { title = Resources.Details }, null, null);
}
)
)
Здесь параметр format принимает делегат Func<dynamic, object>, а параметр функции ActionLinkWithImage<T> принимает Expression<Action<T>>
Если изменить код таким образом:
@grid.GetHtml(
columns: grid.Columns(
grid.Column(null, null, format: item =>
{
int id = item.Id;
return Html.ActionLinkWithImage<ClientRecordController>(c => c.ClientRecordIndex(0, id, null), "~/Content/Images/users.png", new { title = Resources.Details }, null, null);
}
)
)
то все работает. Почему?
Здравствуйте, Jack128, Вы писали:
J>Операции с dynamic — в набор допустимых выражений не входят, отсюда и ошибка. Правда не в курсе, это ограничение деревьев или же компилера.
Это ограничение C#, компилятор ET и DynamicExpression, и всякие statement'ы компилирует на ура