好的,所以我在一家公司工作,在我被聘用之前,公司有一个人用Visual Basic编写程序。然而,他生气了,跑了,所以我无法与他沟通。我的工作是将他的程序转换为C#。他没有正式的编程培训,因此他的代码中根本没有任何评论。在他的代码中,他有以下行(用C#编写):
if (boolVariable == 13)
我假设我应该将int转换为bool,反之亦然,但我想我先问你们。为了提供更多信息,boolVariable仅在其他两个地方引用。声明设置为false的声明,以及另一个声明检查是否为true的声明。否则代码中的其他位置被定义为其他东西,所以我认为这可能是无用的代码。但是,这段代码不会导致Visual Basics中的错误,这也让我有点困惑。视觉基础会自动为您转换吗?任何帮助将不胜感激。
答案 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
}
但最好的办法是了解正在发生的逻辑:
boolVariable
为true
?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
,这会阻止他写它。