【发布时间】:2016-05-02 23:41:16
【问题描述】:
我创建了一个函数来一次设置对象的多个属性。如果某个参数没有传递给函数,那么我想避免设置/更改它。我能想出的最干净的解决方案的简化示例如下:
private void setObjectProperties(MyObject myObject, float param1, bool? param2 = null)
{
myObject.param1 = param1;
myObject.param2 = param2 != null ? (bool)param2 : myObject.param2;
}
从这个方法可以看出,如果调用函数时没有传递param2,那么它只会将myObject.param2 设置为自身。 (这意味着如果没有任何东西传递给param2,那么myObject.param2 属性不会被触及)
我所拥有的似乎有点乱。我不确定这是否是“正确”的事情。我曾考虑过方法重载,但我认为这会更加混乱;在现实世界的情况下,我传递了两个以上要设置的参数,因此我最终可能会遇到很多重载。
我是否遗漏了 C# 中的一些明显功能,允许我说“如果没有将任何内容传递给它的相应参数,则不要设置此参数”?
【问题讨论】:
-
那为什么存在方法重载呢?我会保持标准,所以任何查看代码的人都知道发生了什么
-
@FirstStep 如果有 5 个属性,则需要 32 个重载才能覆盖所有情况。
-
不是 1 或 2 或 3 或 4 或 5 吗? @rob
-
@FirstStep 否,因为您可以设置:[not 1, not 2]、[1, not 2]、[not 1, 2]、[1, 2] 等等,对于2 个属性。
-
您希望您的代码根据布尔条件的值做两件不同的事情。 在这种情况下考虑使用“if”语句。
标签: c# null nullable null-coalescing-operator