gpt4 book ai didi

design-patterns - 强类型整数

转载 作者:行者123 更新时间:2023-12-03 07:14:15 25 4
gpt4 key购买 nike

作为一个业余爱好项目的思想实验,我一直在想一种方法来确保这种微妙的错误/拼写错误不会发生:

public void MyMethod(int useCaseId)
{
// Do something with the useCaseId
}

public void SomeOtherMethod()
{
int userId = 12;
int useCaseId = 15;
MyMethod(userId); // Ooops! Used the wrong value!
}

这个错误很难发现,因为没有编译时错误,而且你甚至不一定会在运行时遇到异常。你只会得到“意想不到的结果”。

为了以简单的方式解决这个问题,我尝试使用空枚举定义。有效地使用户 ID 成为数据类型(而不需要像类或结构那样):

public enum UseCaseId { // Empty… }

public enum UserId { // Empty… }

public void MyMethod(UseCaseId useCaseId)
{
// Do something with the useCaseId
}

public void SomeOtherMethod()
{
UserId userId = (UserId)12;
UseCaseId useCaseId = (UseCaseId)15;
MyMethod(userId); // Compile error!!
}

你觉得怎么样?

最佳答案

如果您要麻烦地创建新类型来保存 UserIdUseCaseId,您几乎可以轻松地将它们制作成简单的类并使用隐式转换来自 int 的运算符为您提供所需的语法:

public class UserId
{
public int Id { get; private set; }

public UserId(int id)
{
id_ = id;
}

public static implicit operator UserId(int id)
{
return new UserId(id);
}

public static void Main()
{
UserId id1 = new UserId(1);
UserId id2 = 2;
}
}

这样,您就可以获得类型安全性,而不必在代码中使用强制转换。

关于design-patterns - 强类型整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3448554/

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