Convert.toInt32(boolean)是c#执行此操作的唯一方法吗?

时间:2014-01-10 13:54:38

标签: c# refactoring boolean dynamics-crm-2011

我在c#中有一些代码,如果某个布尔值为真,则需要将数字增加1,否则需要说明相同的代码。我在VS 2012中使用立即窗口找到的唯一方法是+ Convert.ToInt32(boolean)

我在某处遗漏了一些明显的东西吗?我认为因为布尔值基本上是真(1)或假(0)(让我们忘记FileNotFound),所以更容易将布尔值强制转换为Int值。

编辑: false为0,而不是1

edit2:我原来的编辑被吞没了。我目前正在对数字进行null检查(该数字是来自Dynamics CRM 2011实体的可空int字段)。是否可以保留该nullcheck?

4 个答案:

答案 0 :(得分:6)

我不认为在某些值上添加布尔标志是非常易读的解决方案。基本上,如果flag为true,您希望递增(即加1)值。所以,如果检查会清楚地描述你的意图添加就可以做到这一点很简单:

if (flag) value++;

更新:根据您的编辑,您想要做两件事:

  1. 将默认值设置为可以为空的值
  2. 如果某些条件为真,则递增值。
  3. 为了使你的代码清晰,我不会试图把两件事都放在一行。明确表达你的意图:

    value = value ?? 0; // 1
    
    if (flag) // 2
        value++;
    

答案 1 :(得分:3)

简单的解决方案就是这样:

val += flag ? 1 : 0;

事实上,.NET boolean只是一个与整数完全不同的类型(不像在C ++中,它是一个“重命名的”整数)。事实上,它实际上是使用整数值实现的,是实现细节而不是依赖它。实际上,当你弄乱布尔值的实际值时(例如,使用直接内存操作或重叠结构字段),你可以做很多奇怪的事情 - 一致性消失了。

所以,不要使用“布尔值的实际值”。只需预期两个可能的值truefalse,并使用这些值。

答案 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