之前將部分UW網站VB程式碼轉到C#,
我是用此工具轉
http://www.developerfusion.com/tools/convert/vb-to-csharp/
轉換後,放到visual studio還是有很多毛毛蟲
整理一些問題, 希望能減少轉換上的困難
1. Imports --> using (using 只能用namespace)
System.Web.HttpContext 是不能放在using, 因為他是類別, 不是 namspace
所以 Current.Session 要調整成 HttpContext.Current.Session
2. index或是key, value類的東西要用中括號 []
VB:Session("name") --> C#:Session["name"]
Cache(""), Application(""), DataRow("") 也是一樣
3. 所有方法都要加上 ()
例如 ToString --> ToString()
例如 ToLower --> ToLower()
4. 不能隱含式的型別轉換, 要明確
轉換型態可以有以下方法
- 轉字串時, 直接後面加上 .ToString()
- Convert 物件轉換
- 變數名稱前面加上(Type), 例如 (HashTable)Session["htData"]
- 以 as 方式轉換, 若要轉換的物件可能是null建議用此方法, 例如
System.Net.HttpWebRequest http = System.Net.WebRequest.Create(Url) as System.Net.HttpWebRequest;
string strData = HttpContext.Current.Cache["CacheName"] as string;
用 as 方法不會強制轉換, 用 (Type) 或 ToString() 一旦遇到 null 會發生Exception
5. 帶參數的 Property C#是不允許的, .Net 會自動產生 get_ function 取代
VB: UW.WU.URL --> C#: UW.WU.get_URL();
6. partial 要放在 public 後面
7. aspx頁面C#的檔頭要設定AutoEventWireup="true"
另外所有的 server control 的 On Event 所執行的function name (例如 Button 的 OnClick) 都要在 aspx 裡面設定
(這部分會在後台程式發生,因為轉換後常忘了加)
<asp:DropDownList ID="ddlName" runat="server" AutoPostBack="true"
OnSelectedIndexChanged="ddlName_SelectedIndexChanged"></asp:DropDownList>
<asp:Button ID="btnAdd" runat="server" Text="新增" OnClick="btnAdd_Click" />
8. 因為字串相加也是 +, 一些特殊寫法要注意
VB: (Url & "Page=" & EndPage + 1) --> VB會先將整數加好後再字串相加
c#: (Url + "Page=" + (EndPage + 1)) --> 由於C#會先將1轉為字串再把所有字串相加 , 所以要先用括號包起來先讓整數相加
9. vbCrLf -> "\r\n"
vbTab -> "\t"
10. VB function 轉換
Conversion.Fix -> Math.Floor
Strings.Format(x, "###0.0") -> 用 x.ToString("N1");
11. EN 處理要多加注意,需額外加 (int) 才會顯示數值,很多 sql 指令這樣拼要小心
" where EN_
產品性質 = " + SHOPUNT.EN.產品性質.非成品 ; ->
where EN_產品性質 = 非成品 (會出錯)
"
where EN_產品性質 = " + (int)SHOPUNT.EN.產品性質.非成品; ->
where EN_產品性質 = 100
先整理這些 以後遇到再加上