Вопрос

Каковы возможные причины, по которым Nullable < > типы запрещены для передачи в качестве параметра TModel System.Web.Mvc.ViewPage < TModel > общий? Иногда это может быть удобно.

В ASP.NET MVC источник определил, какой TModel должен быть классом:

public class ViewPage<TModel> : ViewPage where TModel : class

но обнуляемые типы являются типами значений. Может быть, определение может быть менее ограничительным ...

Это было полезно?

Решение

Сейчас это не имеет смысла работать, так как ViewPage < T > внутренне всегда проверяет, что модель является экземпляром T. Вы никогда не сможете передать значение null из-за этой проверки.

Что касается того, почему типы структур не были разрешены в первую очередь, было множество причин. Среди них: (а) это может побудить людей использовать нестандартные типы структуры для модели, что почти никогда не бывает правильным; (б) вы не можете передать тип структуры в качестве параметра в Controller.UpdateModel (); (c) модели должны иметь эталонное равенство, чтобы фильтры могли их проверять и модифицировать; (d) встроенные типы структур, такие как int и т. д., обычно сами по себе не используются в качестве объекта модели; и (e) типы структуры не поддерживают наследование, например, передача int-модели в ViewPage < long > взорвется.

Оказывается, что (c), вероятно, не является проблемой, потому что типы структур должны быть неизменными, но другие элементы требуют, чтобы разрешающие типы структур были достаточно продуманы и продуманы, прежде чем их поддерживать. Последствия их поддержки намного больше, чем просто снятие ограничения на ViewPage < T >.

Другие советы

Одно значение на самом деле не является "моделью" - вы могли бы просто использовать словарь и привести?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top