【问题标题】:Prevent mixing up Ids of same base type when passing as arguments在作为参数传递时防止混淆相同基类型的 Id
【发布时间】:2014-07-11 20:18:58
【问题描述】:

我有很多业务逻辑的程序,我不断地调用方法并传递所有整数的 ID(userID、projectID、fooID、barID 等)。有时我会草率并交换参数的顺序,并且 userID 变为 projectID ,反之亦然。

有没有什么地方我可以改变一个 int,这样它就不能作为一个 int 传递,但我可以很容易地将它从 int 转换为 "intB"

我正在寻找类似于可空整数的东西:“int?”,但我可以有“intA”、“intB”、“intC”,并且 ocne 只能作为另一个传递,如果它被显式转换。

C# 中是否存在类似的东西?

【问题讨论】:

  • named parameter 传递你的价值观,比如yourMethod(userID: userId,....
  • 你也可以创建自己的类,不是吗..?
  • @DJKRAZE 我可以,但我觉得这对于单个属性来说有点沉重
  • 你不能。编译器、抖动和 CLR 对值类型具有深入的内置知识。像 int。不知何故,您没有非常有效地使用 IntelliSense,请在编写自己的 CLR 之前先解决这个问题。
  • TruthOf42,我已更改标题 - 请查看它是否符合您的意图并在必要时编辑/还原。

标签: c# types int


【解决方案1】:

创建一个包含 int 的结构。就这么简单。几乎为零开销,因为它将被优化。

【讨论】:

  • +1。 @SargeBorsch - 我不认为这种特殊类型的元素有问题。我真的看不出像UserID ++ 这样的有效代码。实际上,我认为不能轻松地做 UserId + UserId 这样的事情是有益的。
  • 最重要的是,一个人不会失去使用operatoes的能力,因为-猜猜看,在C#中你可以为你的结构定义运算符;)
  • 嗯,有复制/粘贴,有模板你可以使用。对于 ID,您将不需要算术;)
【解决方案2】:

如果问题是把参数弄乱了,你有没有尝试在调用方法时使用参数的名称?

如果你有:

int Divide(int divisor, int dividend)
{
    //stuff
}

你可以这样调用它:

int result = Divide(divisor: 3, dividend:2)

顺序无所谓,你可以做

int result = Divide(dividend:2, divisor: 3) 

还有

【讨论】:

    【解决方案3】:

    命名参数对于防止混淆参数很有用。示例:

    CalculateBMI(123, 64);
    //becomes...
    CalculateBMI(weight: 123, height: 64);
    //or...
    CalculateBMI(height: 64, weight: 123); 
    

    调用方法时只需将参数名称放在参数前面即可。如需更多信息,请参阅Named and Optional Arguments on MSDN

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 2011-06-03
      相关资源
      最近更新 更多