C#中的[必需]'属性用于确保在诸如JSON之类的供应数据时必须提供属性。但是,当与可根据无效类型的类型结合使用时,它似乎是违反直觉的,因为无效的类型可能是无效的。这种组合通常用于防止较低的攻击,恶意用户可能会省略请求中的属性,从而导致模型粘合剂分配默认值,而不是提出错误[4]。
在MVVMCROSS的上下文中,它是使用模型视图-ViewModel(MVVM)模式构建跨平台应用程序的框架,“ [必需]'属性和可确定类型之间的相互作用未直接解决。 MVVMCross主要关注视图和视图模型之间的数据绑定和导航。但是,了解无效类型在C#中的工作方式可以帮助开发人员在其MVVMCross应用程序中管理数据一致性和验证。
###理解无效类型
C#8.0引入了无效的参考类型,使开发人员可以明确指示参考类型是否可以为null。此功能通过在未正确处理空值时在编译时提供警告来帮助防止零参考异常[7]。当使用“ [必需]'属性)使用无效的类型时,属性可确保明确提供值,而无效类型则可以在某些情况下将null成为有效输入的可能性[4]。
###使用[必需的]与无效类型
在您需要强制执行属性但也允许其为null的情况下(例如,使用``[必需)''''''''属于null的json有效载荷,而具有不可用类型的属性可能是有益的。但是,这种方法主要适用于Web API或类似上下文中的数据验证,而不是直接在MVVMCross中。
对于MVVMCross应用程序,确保在视图模型中正确初始化和验证属性至关重要。 MVVMCross并未以独特的方式直接与“ [必需]属性]属性相互作用,但开发人员可以利用C#的无效参考类型和验证属性来管理其应用程序的数据完整性。
MVVMCross中的自定义验证
如果您需要在MVVMCross应用程序中执行特定的验证规则,则可以考虑在视图模型中实现自定义验证逻辑。这可能涉及检查零值或确保在进行业务逻辑之前填充某些属性。 MVVMCross提供了自定义数据绑定和交互处理的机制,可用于实施此类验证[5]。
总而言之,虽然``必需的]'属性和无效类型主要用于Web API等数据验证上下文中,但了解它们的交互可以帮助MVVMCross开发人员在其应用程序中管理数据一致性和验证。但是,MVVMCROSS本身并没有针对Web Frameworks可能的``属性''的特定内置支持。
引用:[1] https://stackoverflow.com/questions/47074979/mvvmcross-view-model-model-mvxinteraction-is-as-always-null
[2] https://dev.to/theramoliya/c-required-tribute-for-non-non-nonbleable-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 what-does-it-mean-for-a-property-to-be-be-be-be-be-be-be-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_how_is/