我在网上什么都没发现[必需]实际上是什么。 msdn-article根本没有探索性。
static class Program
{
public static Main()
{
var vustomer = new CustomerClass();
}
}
public class CustomerClass
{
public string m_FirstName;
[Required]
public string m_LastName;
}
据我所知,这应该抛出异常,因为m_LastName是必需的,但没有设置。但我没有得到一个。我不知道它有什么好处以及它实际上做了什么。
答案 0 :(得分:7)
RequiredAttribute
除了注释某些东西(在这种情况下,是一个类型的字段)之外什么都不做。完全取决于使用该类型来检测属性的存在并相应地做出响应的应用程序。
您的示例程序不执行此操作,因此该属性没有任何可见效果。某些框架(如ASP.NET MVC和WPF 执行检查并响应属性的存在。
答案 1 :(得分:3)
Validator
类使用此属性根据从ValidationAttribute
继承的任何类型添加验证错误。例如,MVC model validation使用它。
答案 2 :(得分:1)
RequiredAttribute
上的文档:
指定需要数据字段值。
但是,此验证通常仅在UI层中执行。它不会被“烘焙”到构造函数或其他低级用法中。如果您想手动触发验证,可以执行以下操作:
var customer = new CustomerClass();
var context = new ValidationContext(customer, serviceProvider: null, items: null);
var results = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(customer, context, results);
if (!isValid)
{
foreach (var validationResult in results)
{
Console.WriteLine(validationResult.ErrorMessage);
}
}
答案 3 :(得分:1)
要添加到当前答案中,这些一些我可以想到的实际用途:
这是一些用途,但您不限于此。
(1)注意:如果你的属性是一个int,你用Required来装饰它,模型状态将永远不会处于无效状态。您应该为此用例使用Nullable属性。
答案 4 :(得分:0)
在C#中,属性几乎是类和属性的装饰。
除了一些与安全相关的属性外,大多数都没有做任何事情。它们被更高级别的框架用来做某事。
对于ASP.NET 4 MVC,仅当对象是请求时,该属性用于生成错误。
如果要在任何其他环境中使用该属性,则必须编写代码以进行检查。
它不会从普通的public static void Main()
答案 5 :(得分:-1)