我对+和&的使用感到困惑。在ASP.NET和VB.NET中。请参阅以下代码:
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 :(得分:3)
使用“&”对于连接,“+”将一直有效,直到您有一个值可以在串联中执行数学运算。它将尝试执行添加而不是连接。
例如。
"blah" & "blah" works
"blah" + "blah" works
"blah" & 5 works
"blah" + 5 fails
最后一个不起作用,因为它会尝试“添加”5和一个字符串
答案 1 :(得分:0)
据我所知,VB字符串连接使用&amp ;, 不要使用+
“A”& “B”& “C”=“ABC”
“A”+“B”+“C”= hmmm错误? (编辑)显然这是有效的......
(更多编辑)......
您错误的可能答案:
我不认为这个错误与&或+现在。
它可能是您childDir
的{{1}}类型。您可能希望获取其中的目录名称,而不是仅仅在字符串concat中删除childDir。
尝试将其更改为&在那个结尾DirectoryInfo
。
答案 2 :(得分: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答案的评论,该评论不是在一个声明中混合 + 和& 。
答案 3 :(得分:0)
在VB中,&
用于字符串连接。您只应使用+
进行添加操作。
+
的问题在于它尝试进行隐式转换,因此您可以执行
2.5 + 5
C#会给你一个错误,因为2.5是float
而5是int
。你需要施放它们。 VB隐式执行转换,可以隐藏一些错误。