gpt4 book ai didi

c# - 如何避免参数验证

转载 作者:太空狗 更新时间:2023-10-29 22:35:15 25 4
gpt4 key购买 nike

验证原始参数和“复杂数据”

验证参数

编写方法时,应在执行任何操作之前首先验证参数。例如,假设我们有一个代表人的类:

public class Person
{
public readonly string Name;
public readonly int Age;

public class Person(string name, int age)
{
this.Name = name;
this.Age = age;
}
}

这个 Person 类有什么问题?在将其值设置为 Person 的字段之前,不会验证 name 和 age。 “已验证”是什么意思?应该检查这两个参数,以确保它们的值是可以接受的。例如,如果 name 的值为空字符串怎么办?或者年龄的值(value)是-10?

验证参数是通过在值 Not Acceptable 时抛出 ArgumentExceptions 或派生异常来执行的。例如:

public class Person(string name, int age)
{
if (String.IsNullOrEmpty(name))
{
throw new ArgumentNullException
("name", "Cannot be null or empty.");
}

if (age <= 0 || age > 120)
{
throw new ArgumentOutOfRangeException
("age", "Must be greater than 0 and less than 120.");
}

this.Name = name;
this.Age = age;
}

这正确地验证了 Person 的构造函数接收的参数。

令人作呕的乏味

因为您已经验证参数很长时间了(对吗?),您可能厌倦了在所有方法中编写这些 if (....) throw Argument... 语句。

我们可以做些什么来避免在代码中无数次地编写 String.IsNullOrEmpty?

最佳答案

你可以看看Code Contracts in .NET 4.0 .

您可能还想查看 FluentValidation Library on CodePlex如果您不想等待代码契约(Contract)。

最终,您仍然需要将管理参数值的规则放在某个地方——这只是决定您喜欢命令式风格(例如 string.IsNullOrEmpty)还是声明式风格的问题。

验证您的输入是编写可靠代码的关键做法 - 但它肯定会重复和冗长。

关于c# - 如何避免参数验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1608714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com