我在c#中有一些代码,如果某个布尔值为真,则需要将数字增加1,否则需要说明相同的代码。我在VS 2012中使用立即窗口找到的唯一方法是+ Convert.ToInt32(boolean)
。
我在某处遗漏了一些明显的东西吗?我认为因为布尔值基本上是真(1)或假(0)(让我们忘记FileNotFound),所以更容易将布尔值强制转换为Int值。
编辑: false为0,而不是1
edit2:我原来的编辑被吞没了。我目前正在对数字进行null检查(该数字是来自Dynamics CRM 2011实体的可空int字段)。是否可以保留该nullcheck?
答案 0 :(得分:6)
我不认为在某些值上添加布尔标志是非常易读的解决方案。基本上,如果flag为true
,您希望递增(即加1)值。所以,如果检查会清楚地描述你的意图添加就可以做到这一点很简单:
if (flag) value++;
更新:根据您的编辑,您想要做两件事:
为了使你的代码清晰,我不会试图把两件事都放在一行。明确表达你的意图:
value = value ?? 0; // 1
if (flag) // 2
value++;
答案 1 :(得分:3)
简单的解决方案就是这样:
val += flag ? 1 : 0;
事实上,.NET boolean只是一个与整数完全不同的类型(不像在C ++中,它是一个“重命名的”整数)。事实上,它实际上是使用整数值实现的,是实现细节而不是依赖它。实际上,当你弄乱布尔值的实际值时(例如,使用直接内存操作或重叠结构字段),你可以做很多奇怪的事情 - 一致性消失了。
所以,不要使用“布尔值的实际值”。只需预期两个可能的值true
和false
,并使用这些值。
答案 2 :(得分:0)
您仍然可以使用null
- 检查并根据布尔值添加值,如下所示:
obj.Variable = (obj.Variable ?? 0) + (yourBoolean ? 1 : 0);
//obj is the instance of your object
//Variable is the nullable integer
//yourBoolean is the bool to check against
答案 3 :(得分:0)
Object.variable是int变量还是Nullable?对于Int变量,其默认值为0,您可以这样写:Object.variable+=bool?1:0
,否则可以使用它:Object.variable=Object.variable??0+bool?1:0