2009-07-15 43 views
0

我對使用ASP.NET和VB.NET中的+和&存在一些困惑。請看下面的代碼:在asp.net中使用&和+ vb

Dim dtUser As DataTable = GetDetails() 
     Dim serverPath As String = Nothing 
     Dim virtualServerPath As String = Nothing 
     Dim parentDir As DirectoryInfo = Nothing 
     Dim childDir As DirectoryInfo = Nothing 
     serverPath = Page.Server.MapPath(".") + "\" 
     virtualServerPath = serverPath.Substring(0, serverPath.LastIndexOf("\")) 
     virtualServerPath = virtualServerPath + "\SiteImages\" + dtUser.Rows(0)("Name") 
     parentDir = Directory.CreateDirectory(virtualServerPath) 
     childDir = parentDir.CreateSubdirectory(Session("RegID")) 
     Dim strUserName as String=dtUser.Rows(0)("Name") 
     If flUpload.HasFile Then 
      flUpload.SaveAs(Server.MapPath("~/SiteImages/" & dtUser.Rows(0)("Name") & "/" & childDir + "/" + flUpload.FileName)) 

我越來越關心+的使用和&錯誤

flUpload.SaveAs(Server.MapPath("~/SiteImages/" & strUserName & "/" & childDir + "/" + flUpload.FileName)) 

任何人可以幫助清除錯誤

+0

請參閱下面的答案。這個問題顯然無關w /&和+,顯然它們是可互換的,儘管我絕不會在VB中使用字符串連字符+。 – 2009-07-15 05:14:41

回答

0

據我所知VB字符串連接使用&,請勿使用+

「A」&「B」&「C」=「ABC」

「A」+「B」+「C」= hmmm error? (編輯)顯然這個工程...

(更多編輯)...

可能回答你的錯誤:

我不認爲錯誤是什麼關係&或現在+。 這可能是您的childDir,它的類型是DirectoryInfo。您可能想要在其中獲取目錄的名稱,而不是在字符串concat中填充childDir。

嘗試將其更改爲& childDir.Name在該連接中。

+0

顯然+正在工作......嗯......我不知道:)當時我在做VB 6時從未使用它。 – 2009-07-15 04:44:48

3

使用「&」進行連接時,「+」將一直工作,直到您具有可在連接中執行數學運算的值爲止。它將嘗試執行添加而不是串接。

例如。

"blah" & "blah" works 
"blah" + "blah" works 
"blah" & 5 works 
"blah" + 5 fails 

最後一個不工作,因爲它會嘗試 「添加」 5串

+0

另外我不認爲你可以在同一個聲明中混合它們。如果您嘗試執行「blah」&「blah」+「blah」,它將失敗,因爲它會嘗試添加最後一個字符串。 – CodeKiwi 2009-07-15 04:51:00

0

變化

flUpload.SaveAs(Server.MapPath("~/SiteImages/" & 
         dtUser.Rows(0)("Name") & 
              "/" & 
             childDir + 
              "/" + 
      flUpload.FileName)) 

flUpload.SaveAs(Server.MapPath("~/SiteImages/" & 
         dtUser.Rows(0)("Name") & 
              "/" & 
             childDir & 
              "/" & 
      flUpload.FileName)) 

,並留意@ CodeWiki對this的迴應是不是混合+&在一個聲明。

0

在VB中,&用於字符串連接。您應該只使用+進行加法操作。

+的問題是,它試圖做隱式轉換,所以你可以做

2.5 + 5 

C#會給你一個錯誤,因爲2.5是一個float和5將是一個int。你需要投它們。VB會隱式執行轉換,這可以隱藏一些錯誤。

+0

你只需要調整Visual Studio中的項目的編譯器選項以警告或導致這些情況的異常......但它可能不是默認值。 – davidsleeps 2009-07-15 05:29:39