gpt4 book ai didi

c# - 我知道我做错了验证。请劝我停止 :)

转载 作者:太空狗 更新时间:2023-10-30 00:36:36 29 4
gpt4 key购买 nike

首先让我解释一下我目前如何处理 IPv4 地址验证:

public struct IPv4Address {
private string value;

private IPv4Address(string value) {
this.value = value;
}

private static IPv4Address CheckSyntax(string value) {
// If everything's fine...
return new IPv4Address(value);

// If something's wrong with the syntax...
throw new ApplicationException("message");
}

public static implicit operator IPv4Address(string value) {
return CheckSyntax(value);
}

public static implicit operator string(IPv4Address address) {
return address.value;
}
}

我有一堆这样的结构。

他们通常有额外的私有(private)成员来处理事情,但不会公开公开方法。

这是一个示例用法:

IPv4Address a;
IPv4Address b = "1.2.3.4";
a = b;
b = "5.6.7.8";

string address = a;

// c contains "1.2.3.4"
IPv4Address c = address;

// See if it's valid
try {
IPv4Address d = "111.222.333.444";
}
catch (ApplicationException e) {
// Handle the exception...
}

我能感觉到这有一些非常令人不安的地方,因此我正在考虑切换到一个静态类,使用 IsIPv4Address 等方法。

现在,这是我认为上述方法的错误之处:

  • 新团队成员必须全神贯注于此

  • 它可能会阻碍与第 3 方代码的集成

  • 异常是昂贵的

  • 从来没有见过这样的事情,我是一个内心保守的人:)

然后是我喜欢它的地方:

  • 非常接近拥有大量专用基元,因为您拥有值类型。

  • 在实践中,它们通常可以像基本类型一样使用,例如,将上面的结构传递给接受字符串的方法不是问题。

  • 而且,我最喜欢的一点是,您可以在对象之间传递这些结构,并确保它们包含语法上有效的值。这也避免了必须始终检查正确性,如果不必要地检查甚至忘记检查,可能代价高昂。

我找不到上述方法的致命缺陷(这里只是初学者),您怎么看?

编辑:正如您可以从第一行推断的那样,这只是一个示例,我并不是在寻求一种验证 IP 地址的方法。

最佳答案

首先,您应该阅读有关隐式转换的文章,以及何时使用它(以及为什么在您的场景中使用它不好),您可以开始 here .
如果你需要检查方法,它们应该是 public static,而不是这种奇怪的构造,除此之外,拥有这样的方法可以让你选择是否要抛出异常(比如 .Parse() 方法做),或者通过返回一些应该检查的值来发出信号(比如 .TryParse() 方法)。
除此之外,拥有用于创建有效对象的静态方法并不意味着你不能使用值类型(结构)而不是类,如果你真的想要的话。另外,请记住结构具有隐式空构造函数,您不能“隐藏”它,因此即使您的构造也可以像这样使用:

IPv4Address a = new IPv4Address();

这会给你无效的结构(值将为空)。

关于c# - 我知道我做错了验证。请劝我停止 :),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1379767/

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