Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Как атрибут [требуется] взаимодействует с нулевыми типами в API MVVMcross


Как атрибут [требуется] взаимодействует с нулевыми типами в API MVVMcross


Атрибут `[требуется]` в C# используется для обеспечения того, чтобы свойство должно быть предоставлено при опустошенном данных, например, от JSON. Однако в сочетании с нулевыми типами это может показаться нелогичным, поскольку нулевые типы могут быть нулевыми. Эта комбинация часто используется для защиты от атак недолюгательства, когда вредоносный пользователь может опустить свойство в запросе, в результате чего модель связует назначать значение по умолчанию вместо того, чтобы увеличить ошибку [4].

В контексте MVVMcross, которая представляет собой основу для построения кроссплатформенных приложений с использованием шаблона модели-визуалмоделя (MVVM), взаимодействие между атрибутом «[требуется]» и нулевыми типами. MVVMcross в первую очередь фокусируется на привязке данных и навигации между представлениями и моделями представлений. Тем не менее, понимание того, как нулевые типы работают в C#, может помочь разработчикам управлять последовательности данных и валидацией в своих приложениях MVVMcross.

Понимание нулевых типов

C# 8.0 Введены нулевые ссылки, позволяющие разработчикам явно указывать, может ли эталонный тип быть нулевым. Эта функция помогает предотвратить нулевые справочные исключения, предоставляя предупреждения во время компиляции, когда нулевые значения не обрабатываются должным образом [7]. При использовании нулевых типов с атрибутом `[обязательно]` атрибут гарантирует, что значение явно предоставляется, в то время как нулевой тип допускает возможность того, что NULL является допустимым входом в определенных сценариях [4].

с использованием [требуется] с нулевыми типами

В сценариях, в которых вам необходимо обеспечить соблюдение того, что предоставляется свойство, но также разрешает ему быть нулевым (например, для обработки полезных нагрузков JSON, где свойство может быть явно установлено на NULL), используя атрибут [требуется] `с нулевыми типами может быть полезным. Тем не менее, этот подход в первую очередь применяется к проверке данных в веб -API или аналогичных контекстах, а не непосредственно в MVVMcross.

Для приложений MVVMcross, обеспечение того, чтобы свойства должным образом инициализированы и проверены в моделях обзора, имеет решающее значение. В то время как MVVMcross не взаимодействует напрямую с атрибутом «[обязательно]» уникальным образом, разработчики могут использовать нулевые типы ссылок C#и атрибуты валидации для управления целостностью данных по всему приложению.

Пользовательская проверка в MVVMcross

Если вам необходимо обеспечить соблюдение конкретных правил проверки в приложении MVVMcross, вы можете рассмотреть возможность реализации пользовательской логики проверки в ваших моделях просмотра. Это может включать проверку нулевых значений или обеспечение того, чтобы определенные свойства были заполнены, прежде чем продолжить бизнес -логику. MVVMcross предоставляет механизмы для пользовательского привязки данных и обработки взаимодействия, которые можно использовать для реализации такой проверки [5].

Таким образом, хотя атрибут «необходимых]» и нулевые типы используются в основном в контекстах проверки данных, таких как веб -API, понимание их взаимодействия может помочь разработчикам MVVMcross управлять последовательности данных и валидацией в своих приложениях. Тем не менее, сам MVVMcross не имеет конкретной встроенной поддержки для атрибута «необходимых]» так, как это могли бы веб-фреймворки.

Цитаты:
[1] https://stackoverflow.com/questions/47074979/mvvmcross-view-model-mvxinteraction-is-always-null
[2] https://dev.to/theramoliya/c-required-attribute-for-non-nullable-reference-types-44hb
[3] https://www.reddit.com/r/csharp/comments/10wayn5/required_attribute_and_null_help/
[4] https://stackoverflow.com/questions/43688968/what-does-it-mean-for-a-property-be-required и nullable
[5] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[6] https://learn.microsoft.com/en-us/dotnet/csharp/nullable-references
[7] https://devblogs.microsoft.com/dotnet/embracing-nullable-reference-types/
[8] https://www.reddit.com/r/blazor/comments/14x5krd/nullable_types_and_required_keyword_how_is/