检查Bool是否等于整数

时间:2014-10-17 20:57:05

标签: c# vb.net integer boolean

好的,所以我在一家公司工作,在我被聘用之前,公司有一个人用Visual Basic编写程序。然而,他生气了,跑了,所以我无法与他沟通。我的工作是将他的程序转换为C#。他没有正式的编程培训,因此他的代码中根本没有任何评论。在他的代码中,他有以下行(用C#编写):

if (boolVariable == 13)

我假设我应该将int转换为bool,反之亦然,但我想我先问你们。为了提供更多信息,boolVariable仅在其他两个地方引用。声明设置为false的声明,以及另一个声明检查是否为true的声明。否则代码中的其他位置被定义为其他东西,所以我认为这可能是无用的代码。但是,这段代码不会导致Visual Basics中的错误,这也让我有点困惑。视觉基础会自动为您转换吗?任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:4)

我不是假装自己是VB的专家,但这是一个有效的例子:

Imports System

Public Class Test
    Public Shared Sub Main()
        Dim runningVB As Boolean
        ' Check to see if program is running on Visual Basic engine.
        If scriptEngine = "VB" Then
            runningVB = 16
            If runningVB = True Then
                Console.WriteLine("True")
            End If
            runningVB = 0
            If runningVB = False Then
                Console.WriteLine("False")
            End If
        End If
    End Sub
End Class

输出:

True
False

因此,与许多其他编程语言一样,false将为零,否则为true。尽管这种类型的检查在C中完全可以接受,但C#编译器可能会抱怨。

答案 1 :(得分:3)

是的,Visual Basic会为您转换它。零将转换为False,所有其他整数将转换为True

转换'最简单的方式您发布的代码是删除' == 13'。这个应该完成同样的事情。

if (boolVariable)
{ 
    // Do stuff 
}

但最好的办法是了解正在发生的逻辑:

  • boolVariabletrue
  • 时,下面的块中会执行哪些代码?
  • 哪些事件会触发boolVariable值的变化?
  • boolVariable 真正代表什么(......然后更改名称!)

如果您能理解这些内容,那么您可以为变量赋予更有意义的名称(可能是更有意义的类型),并且代码将来更容易维护。

我不羡慕你 - 转换糟糕的,未注释的代码是一项艰巨的任务。我的建议是:不要直接转换。如果你这样做,那么你只需要使用不同语言的坏的,未注释的代码。从现在开始一年后,我们会看到另外一篇关于您转换的代码的帖子! :)

我会确保你的老板理解并签署首先进行体面转换所需的努力,然后花费额外的时间来做正确的事。

答案 2 :(得分:0)

下面的示例代码可能有用..; - )

Option Strict Off  ' this code will not compile with (Option Strict On)
Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim boolVariable As Boolean = False

        boolVariable = -1   ' anything non-zero will set boolean to True
        Debug.WriteLine(boolVariable)
        boolVariable = 0    ' zero will set boolean to False
        Debug.WriteLine(boolVariable)
    End Sub
End Class

答案 3 :(得分:0)

VB行为:

你说它是用VB编写的,所以,我认为原始代码看起来像这样:

    If boolVariable = 13 Then // Remeber : it was VB..
        // Code block if True
        // ...
    Else
        // Code block if False
        // ...
    End If

现在让我们来看看代码的行为......

    // Remeber : it was VB..

    If boolVariable = 13 Then
    /* The boolVariable is a Boolean
    The "13" is an Integer
    First step is performing a Widening conversion Boolean -> Integer
    boolVariable is converted to 0 if False, or 1 if True.

    So, depending on the value of boolVariable, the statement is
    either : */
    If 0 = 13 Then // which is False
    // either :
    If 1 = 13 Then // which is also False

    // That means that writing If boolVarialbe = 13 is the same as writing :
    If False Then
        // Block of code THAT WILL NEVER BE EXECUTED
    Else
        // Block of code that will ALWAYS be executed
    End If

恕我直言,写If (boolVariable == 13)(用它的VB或C#)是没有意义的。

当我测试在最终代码中无关的特定时,我会做这些奇怪的事情。也许前程序员做了类似的事情,但未能删除那部分代码。在不知道代码的作用及其对整体范围的影响的情况下,我不能说它是应用程序的一个关键部分应该修复还是垃圾。

无论如何,像If (boolVar == numVar)这样的陈述在今天的编程方式(恕我直言)中是禁止。前程序员未能激活Option Strict,这会阻止他写它。