Я разрабатываю помощник MVC, в котором я хочу обрабатывать каждое свойство Model.Проблема при передаче списка с использованием лямбда для помощника MVC
Я создал следующий класс:
public class DataTableHtmlString<T> : HtmlString
where T : class
{
public DataTableHtmlString(string value) :
base(value)
{
}
public DataTableHtmlString<T> Columns<TM>(Expression<Func<TM, T>> columns)
where TM : DataTableColumn<T>
{
return this;
}
}
Мой класс DataColumn выглядит следующим образом:
public class DataTableColumn<T>
{
internal string ColumnTitle { get; set; }
public void Column(Expression<Action<T>> column)
{
}
}
Когда я использую, чтобы позвонить мой вспомогательный метод как:
@(Html.MyControls()
.MyGrid<PersonModel>()
.Columns(column =>
{
column.Column(w => w.Name);
})
)
Это дает ошибка для метода .Columns as: "Аргумент типа s для метода 'DataTableHtmlString.Columns (Expression>)' не может быть выведен из использования. Попробуйте явно указать аргументы типа. "
Update
Я добавил Columns<DataTableColumn<Jquery.DataTable.MVC5.Demo.Models.PersonModel>>
и его работу, но я уже упоминал в методе Столбцы, ТМ DataTableColumn и Т класс, который будет доступен с MyGrid<PersonModel>
так почему я должен снова определить? Compiler должны знать, от самой подписи я думаю
Спасибо @AxelWass за ответ. Эта работа, но зачем мне это нужно. Я обновил сообщение. Можете ли вы задуматься? –
Это потому, что TM не может быть выведено из 'column => {column.Column (w => w.Name); } ', потому что здесь' column' не может быть выведено. Вы не можете вывести класс методом, который вы вызываете в этом классе, потому что могут быть другие классы с тем же именем метода. Таким образом, автоматический вывод не может быть применен, компилятор нуждается в небольшой помощи в понимании того, что такое параметр 'column', и что представляет класс TM. – AxelWass
[Здесь] (https://blogs.msdn.microsoft.com/ericlippert/2007/11/05/c-3-0-return-type-inference-does-not-work-on-method-groups/) вы можете увидеть некоторую дополнительную информацию о выводах типа C#, немного устаревшей, но я думаю, что она все равно может вас вскрикнуть. – AxelWass