在c#中,在模型中强制要求字段不为null的最佳方法是什么?
我有一个正在使用的模型,它有可选的和必需的参数。确保在不使用DLL或库代码的情况下填充所需参数的最佳方法是什么?我需要在模型课上直接做这个。我希望能够在每个必需的参数上面使用类似于[Required]的东西,但它在C#中似乎不存在 我是否遗漏了什么,或者强制执行此操作的唯一方法是在实例化过程中需要所需的参数在c#中,在模型中强制要求字段不为null的最佳方法是什么?,c#,parameters,model,C#,Parameters,Model,我有一个正在使用的模型,它有可选的和必需的参数。确保在不使用DLL或库代码的情况下填充所需参数的最佳方法是什么?我需要在模型课上直接做这个。我希望能够在每个必需的参数上面使用类似于[Required]的东西,但它在C#中似乎不存在 我是否遗漏了什么,或者强制执行此操作的唯一方法是在实例化过程中需要所需的参数 public class MyClassItem(RequiredParam1 Param1, RequiredParam2 Param2) { /* Set Parameters here
public class MyClassItem(RequiredParam1 Param1, RequiredParam2 Param2)
{
/* Set Parameters here */
}
注意:由于
model
标记描述,此答案假定为ASP.NETMVC框架
我希望能够在每一个上面使用类似于[必需的]的东西
参数,该参数是必需的,但在C#中似乎不存在
我假设“参数”实际上是指“属性”
可以使用System.ComponentModel.DataAnnotations中的
然后,您的课程将是:
using System.ComponentModel.DataAnnotations;
public class MyClassItem
{
[Required]
public Param1 { get; set; }
[Required]
public Param2 { get; set; }
}
然后,您可以在控制器中使用
ModelState.IsValid
检查此问题。注意:由于模型
标记说明,此答案假定为ASP.Net MVC框架
我希望能够在每一个上面使用类似于[必需的]的东西
参数,该参数是必需的,但在C#中似乎不存在
我假设“参数”实际上是指“属性”
可以使用System.ComponentModel.DataAnnotations中的
然后,您的课程将是:
using System.ComponentModel.DataAnnotations;
public class MyClassItem
{
[Required]
public Param1 { get; set; }
[Required]
public Param2 { get; set; }
}
然后,您可以使用
ModelState在控制器中检查这一点。IsValid
通常的方法是检查参数,如果参数为null
,则抛出ArgumentNullException
(我甚至有一个代码片段,以使我的工作更轻松):
这是一种既定的方法,在方法开始时将这些检查视为先决条件
谈论代码契约:自然地,所描述的null
检查只在运行时起作用。如果您安装了代码契约,则会有一个静态检查器,可以在编译时检查这些前提条件:
public class MyClassItem(RequiredParam1 Param1, RequiredParam2 Param2)
{
Contract.Requires(Param1 != null);
Contract.Requires(Param2 != null);
/* Set Parameters here */
}
如前所述,如果静态检查器位于方法的开头,并且对合同有以下调用,则静态检查器也会识别第一个实现:
public class MyClassItem(RequiredParam1 Param1, RequiredParam2 Param2)
{
if (Param1 == null) {
throw new ArgumentNullException(nameof(Param1));
}
if (Param2 == null) {
throw new ArgumentNullException(nameof(Param2));
}
Contract.EndContractBlock();
/* Set Parameters here */
}
静态检查意味着,如果在编译时明确其中一个参数将为null
,静态检查器将在编译时发出警告。通常的方法是检查参数,如果参数为null
则抛出ArgumentNullException
(我甚至有一段代码片段可以让我的工作更轻松):
这是一种既定的方法,在方法开始时将这些检查视为先决条件
谈论代码契约:很自然,所描述的null
检查只在运行时起作用。如果安装代码契约,将有一个静态检查器,可以在编译时检查这些前提条件:
public class MyClassItem(RequiredParam1 Param1, RequiredParam2 Param2)
{
Contract.Requires(Param1 != null);
Contract.Requires(Param2 != null);
/* Set Parameters here */
}
如前所述,如果静态检查器位于方法的开头,并且对合同有以下调用,则静态检查器也会识别第一个实现:
public class MyClassItem(RequiredParam1 Param1, RequiredParam2 Param2)
{
if (Param1 == null) {
throw new ArgumentNullException(nameof(Param1));
}
if (Param2 == null) {
throw new ArgumentNullException(nameof(Param2));
}
Contract.EndContractBlock();
/* Set Parameters here */
}
静态检查意味着,如果在编译时明确其中一个参数将为null
,静态检查器将在编译时发出警告。我认为您希望生成一个区域,在该区域中可以指定函数的描述和函数的每个参数,
类型
///
在函数前面的行中,点击(回车)我认为您希望生成一个区域,在该区域中可以指定函数的描述和函数的每个参数,
类型
///
在函数前的行上单击(回车)最简单的方法是一个简单的if语句,它只需用鼠标点击resharper,我不知道有什么属性可以做这件事。创建一个带有所需参数参数的构造函数。然后在构造函数中测试参数是否不为null。最简单的方法是一个简单的if语句,它只需一个鼠标即可抛出一个使用resharper单击,我不知道有任何属性会执行此操作。请使用所需参数的参数创建一个构造函数。然后在构造函数中测试参数是否不为null。