2014-10-17 191 views
0

好的,所以我正在爲一家公司工作,在我被聘用之前,該公司有一個用Visual Basic編寫程序的人。然而,他生氣並跑掉了,所以我無法與他溝通。我的工作是將他的程序轉換爲C#。他沒有正式的編程培訓,所以他的代碼中根本沒有評論。在他的代碼,他有以下行(用C#編寫):檢查布爾是否等於整數

if (boolVariable == 13) 

我假設我應該轉換INT爲bool,反之亦然,但我想我會問你們第一次。爲了給你更多的信息,boolVariable僅在其他兩個地方被引用。該聲明被設置爲false,並在另一個if語句中檢查它是否爲true。沒有其他地方的代碼被定義爲其他東西,所以我認爲這可能是無用的代碼。但是,這段代碼在Visual Basics中不會導致錯誤,這也使我有點困惑。視覺基礎會自動爲您轉換嗎?任何幫助將不勝感激。

+3

當Visual Basic將數字數據類型值轉換爲布爾值時,0變爲False,其他所有值都變爲True。 – user1274820 2014-10-17 21:00:38

+2

爲什麼13?爲什麼不是10?我會試着理解if語句背後的邏輯並重寫它,忽略愚蠢的數字。 – SimpleVar 2014-10-17 21:00:40

+2

boolVariable是布爾值嗎?或者它是一個int,他命名爲boolVariable,因爲它返回一個布爾值。 – deathismyfriend 2014-10-17 21:03:36

回答

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 

所以,像許多其他的編程語言,假的會爲零,否則爲真。儘管這種類型的檢查在C中完全可以接受,但C#編譯器可能會抱怨。

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 
+0

無論如何要知道我爲什麼被拒絕投票嗎? – Rose 2014-10-17 23:22:03

3

是,Visual Basic將其轉換爲您服務。零將轉換爲False,其他所有整數將轉換爲True

「轉換」您發佈的代碼的最簡單方法是刪除'== 13'。這應該完成同樣的事情。

if (boolVariable) 
{ 
    // Do stuff 
} 

但真正做的最好的事情是瞭解什麼邏輯正在發生:

  • 什麼代碼獲取該塊時boolVariabletrue低於執行?
  • 什麼事件觸發boolVariable值的變化?
  • 什麼boolVariable真的代表(...然後改名字!)

如果你能理解這些東西,那麼你可以給變量更有意義的名稱(也可能是更有意義類型),並且代碼將來會更容易維護。

我不羨慕你 - 這是一個艱難的工作轉換糟糕的,未註釋的代碼。我的建議是:不要直接轉換。如果你這樣做了,那麼你只需要使用不同語言的糟糕的,未註釋的代碼。一年後,我們會看到另外一篇關於您轉換的代碼的文章!:)

我會確保你的老闆理解和簽署做好體面轉換所需的努力,然後再花費額外的時間才能正確轉換。

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