域\ X_User | X_User,域\ Y_User | Y_User,
我正在使用SSRS报告,我收到上述模式的值(它可能包含任意数量的用户),我试图在报告正文中编写一个可视化基本功能(自定义代码)来分割在字符串上面并返回以下值:
X_User,Y_User
我尝试在报告正文中编写此代码
Public Function SubString_Owner(X As String) As String
Dim OwnerArray() As String = Split(X, ",")
Dim Names As String
Dim i As Integer = 0
While i <= OwnerArray.Length - 1
Dim NamesArr As String() = Split(OwnerArray(0), "|")
Names = NamesArr(1) + ","
i += 1
End While
Return Names
End Function
问题是当尝试使用索引拆分OwnerArray(i)时,它会给出错误,但是当使用像“零”OwnerArray(0)这样的固定值时,它构建正常,任何人都可以弄清楚为什么会这样? ?
答案 0 :(得分:0)
字符串是否以逗号结尾,就像你提出的示例字符串一样?
如果是这种情况,那就是你的问题。
您的第一次拆分然后创建一个包含3个索引的数组
{"Domain\X_User|X_User", "Domain\Y_User|Y_User", ""}
(注意索引2中的空字符串)
如果你打算循环数组,你会经历3次,那里的分割对索引0和1都很好,导致{“Domain \ X_User”,“X_User”}和{“Domain \ Y_User” ,“Y_User”},但是拆分第三个索引,拆分的结果是一个空数组。
当您尝试检索NamesArr数组的第二个索引时,它将导致IndexOutOfRangeExeption。
你最好在循环中进行某种检查,以确保你可以实际分割你的价值:
Public Function SubString_Owner(X As String) As String
Dim OwnerArray() As String = Split(X, ",")
Dim Names As String
Dim i As Integer = 0
While i <= OwnerArray.Length - 1
If Not String.IsNullOrEmpty(OwnerArray(i)) AndAlso OwnerArray(i).Contains("|") Then
Dim NamesArr As String() = Split(OwnerArray(i), "|")
Names &= NamesArr(1) & ","
End If
i += 1
End While
Return Names
End Function
我在这里做2次检查,第一次确保提供的值不是Nothing(null),第二次检查它是否包含所需的“|”拆分它。如果值为Nothing,则第二个语句将给出NullReference错误。
另请注意,我编辑了
行Names = NamesArr(1) + ","
到
Names &= NamesArr(1) & ","
您的语句将覆盖每个循环的名称,并且您只返回最后一个用户名。另外要在VB.NET中连接字符串,你应该使用“&amp;”而不是“+”
哦,为什么你没有使用FOR循环?它比While循环更具可读性,因此在这种情况下是首选。