2017-01-23 46 views
1

我從一些舊的VB代碼編寫C#代碼,原來的VB代碼:VB到C#,詭異回傳表達

Shared Function TriangleArea(ByVal side1 As Double, ByVal side2 As Double, ByVal side3 As Double) As Double 
    Dim halfP As Double 
    ' evaluate half of the perimeter 
    halfP = (side1 + side2 + side3)/2 
    TriangleArea = Math.Sqrt(halfP * (halfP - side1) * (halfP - side2) * (halfP - side3)) 
End Function 

函數內的最後一行似乎很奇怪。

在C#我重新寫爲:

public static double TriangleArea(double side1, double side2, double side3) 
     { 
      double halfP; 
      //evaluate half of the perimeter 
      halfP = (side1 + side2 + side3)/2; 
      double TriangleArea = Math.Sqrt(halfP * (halfP - side1) * (halfP - side2) * (halfP - side3)); 
      return TriangleArea; 
     } 

我不知道最後的回報條款。任何建議,如果我是正確的?謝謝!

+0

使用正確的命名約定。它看起來很混亂,因爲你的方法名和返回變量名是相同的。順便說一下,您可以使用此在線工具從VB轉換爲C#或其他方式。 http://converter.telerik.com/ – Hakunamatata

+0

謝謝Hakunamatata! – DennisL

回答

2

在VB中,函數名稱是返回類型的變量,如果您將函數名稱分配給某個返回值,則無需爲此聲明和初始化一個單獨的變量。

這是不可能在c#你不能分配給函數名,所以你需要聲明一個額外的變量來保存值,如果需要的話。

第一個是爲了幫助遷移從VB6繼承的舊語言功能,如果需要,應該使用變量來保存值,並使用返回語句正確地返回方法中的值。

0

如果您必須將返回值分配給變量,則需要將其命名爲與方法名稱不同。另外,在你的情況,你可能甚至不需要一個變量返回之前存儲,因此,你需要做的是改變:

double TriangleArea = Math.Sqrt(halfP * (halfP - side1) * (halfP - side2) * (halfP - side3)); 
return TriangleArea; 

return Math.Sqrt(halfP * (halfP - side1) * (halfP - side2) * (halfP - side3)); 
+0

@ kurakura **謝謝,感謝您的幫助! – DennisL