2009-07-15 40 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