Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#中,在模型中强制要求字段不为null的最佳方法是什么?_C#_Parameters_Model - Fatal编程技术网

在c#中,在模型中强制要求字段不为null的最佳方法是什么?

在c#中,在模型中强制要求字段不为null的最佳方法是什么?,c#,parameters,model,C#,Parameters,Model,我有一个正在使用的模型,它有可选的和必需的参数。确保在不使用DLL或库代码的情况下填充所需参数的最佳方法是什么?我需要在模型课上直接做这个。我希望能够在每个必需的参数上面使用类似于[Required]的东西,但它在C#中似乎不存在 我是否遗漏了什么,或者强制执行此操作的唯一方法是在实例化过程中需要所需的参数 public class MyClassItem(RequiredParam1 Param1, RequiredParam2 Param2) { /* Set Parameters here

我有一个正在使用的模型,它有可选的和必需的参数。确保在不使用DLL或库代码的情况下填充所需参数的最佳方法是什么?我需要在模型课上直接做这个。我希望能够在每个必需的参数上面使用类似于[Required]的东西,但它在C#中似乎不存在

我是否遗漏了什么,或者强制执行此操作的唯一方法是在实例化过程中需要所需的参数

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。