Vb.net 连接字符串(不希望连接空字符串)

Vb.net 连接字符串(不希望连接空字符串),vb.net,Vb.net,我有5个字符串变量,我有一个时刻,我想把它们连接成一个;分离器。但其中一些有时可能是空的,我想跳过它们。到目前为止,我有这个代码 If ACL_PermissionFC.Length > 0 Then ACL_PermissionFC = ACL_PermissionFC.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionFC = "" If ACL_Permiss

我有5个字符串变量,我有一个时刻,我想把它们连接成一个;分离器。但其中一些有时可能是空的,我想跳过它们。到目前为止,我有这个代码

  If ACL_PermissionFC.Length > 0 Then ACL_PermissionFC = ACL_PermissionFC.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionFC = ""

        If ACL_PermissionM.Length > 0 Then ACL_PermissionM = ACL_PermissionM.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionM = ""

        If ACL_PermissionRE.Length > 0 Then ACL_PermissionRE = ACL_PermissionRE.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionRE = ""

 If ACL_PermissionRE.Length > 0 Then ACL_PermissionRE = ACL_PermissionRE.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionRE = ""

        If ACL_PermissionLD.Length > 0 Then ACL_PermissionLD = ACL_PermissionLD.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionLD = ""

dim Permissions as String               
Permissions= ACL_PermissionFC & ";" & ACL_PermissionFC & ";" & ACL_PermissionRE & ";" & ACL_PermissionLD & ";" & ACL_PermissionR & ";" & ACL_PermissionW
当有空字符串时,我得到这个;;具有读取和执行安全性[允许];具有列表文件夹内容安全性[允许];已读取安全性

当字符串为空时,如何使其不连接?我不想要双份;或Triple

使用字符串。与Where/Select和String.IsNullOrWhitespace连接在一起:

将String.Join与Where/Select和String.IsNullOrWhitespace一起使用:


编辑:看来树懒不像他的同姓。当我还在检查语法时,他给出了几乎相同的答案

您可以使用Linq消除空字符串,使用String.Join连接空字符串:

Dim Permissions As String = String.Join(";", { ACL_PermissionFC, ACL_PermissionM, ACL_PermissionRE, ACL_PermissionLD, ACL_PermissionW }.Where(Function(acl) Not String.IsNullOrWhiteSpace(acl)).ToArray())

警告:我的VisualStudio又崩溃了,所以我还没有测试上面的准确性。

编辑:看来sloth没有达到与他同名的人的水平。当我还在检查语法时,他给出了几乎相同的答案

您可以使用Linq消除空字符串,使用String.Join连接空字符串:

Dim Permissions As String = String.Join(";", { ACL_PermissionFC, ACL_PermissionM, ACL_PermissionRE, ACL_PermissionLD, ACL_PermissionW }.Where(Function(acl) Not String.IsNullOrWhiteSpace(acl)).ToArray())

警告:我的VisualStudio又崩溃了,所以我还没有测试上面的准确性。

先修剪一下字符串怎么样

If ACL_PermissionFC.Trim() <> "" Then ACL_PermissionFC = ACL_PermissionFC.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionFC = ""

        If ACL_PermissionM.Trim() <> "" Then ACL_PermissionM = ACL_PermissionM.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionM = ""

        If ACL_PermissionRE.Trim() <> "" Then ACL_PermissionRE = ACL_PermissionRE.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionRE = ""

 If ACL_PermissionRE.Trim() <> "" Then ACL_PermissionRE = ACL_PermissionRE.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionRE = ""

        If ACL_PermissionLD.Trim() <> "" Then ACL_PermissionLD = ACL_PermissionLD.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionLD = ""

dim Permissions as String               
Permissions= ACL_PermissionFC & ";" & ACL_PermissionFC & ";" & ACL_PermissionRE & ";" & ACL_PermissionLD & ";" & ACL_PermissionR & ";" & ACL_PermissionW

这样你就可以看到你的字符串是否完全是空的。

先修剪一下字符串怎么样

If ACL_PermissionFC.Trim() <> "" Then ACL_PermissionFC = ACL_PermissionFC.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionFC = ""

        If ACL_PermissionM.Trim() <> "" Then ACL_PermissionM = ACL_PermissionM.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionM = ""

        If ACL_PermissionRE.Trim() <> "" Then ACL_PermissionRE = ACL_PermissionRE.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionRE = ""

 If ACL_PermissionRE.Trim() <> "" Then ACL_PermissionRE = ACL_PermissionRE.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionRE = ""

        If ACL_PermissionLD.Trim() <> "" Then ACL_PermissionLD = ACL_PermissionLD.PadLeft(PaddingValue) & " [" & ACL_Type & "]" Else ACL_PermissionLD = ""

dim Permissions as String               
Permissions= ACL_PermissionFC & ";" & ACL_PermissionFC & ";" & ACL_PermissionRE & ";" & ACL_PermissionLD & ";" & ACL_PermissionR & ";" & ACL_PermissionW

这样,您将看到字符串是否完全为空。

我不会重复代码。把它放在函数中。使用StringBuilder可能会更好

    Dim permissions As String = ""

    permissions = ConcatenateString(permissions, ACL_PermissionFC, PaddingValue, ACL_Type)
    permissions = ConcatenateString(permissions, ACL_PermissionM, PaddingValue, ACL_Type)
    permissions = ConcatenateString(permissions, ACL_PermissionRE, PaddingValue, ACL_Type)
    permissions = ConcatenateString(permissions, ACL_PermissionRE, PaddingValue, ACL_Type)
    permissions = ConcatenateString(permissions, ACL_PermissionLD, PaddingValue, ACL_Type)

Function ConcatenateString(ByVal str As String, ByVal newValue As String, ByVal paddingValue As Integer, ByVal aclType As String) As String

    newValue = newValue.Trim() ' Needed?

    If newValue.Length > 0 Then
        newValue = newValue.PadLeft(paddingValue)

        If str.Length > 0 Then
            str &= ";"
        End If

        str &= String.Format("{0} [{1}]", newValue, aclType)
    End If

    Return str
End Function

我不会重复代码。把它放在函数中。使用StringBuilder可能会更好

    Dim permissions As String = ""

    permissions = ConcatenateString(permissions, ACL_PermissionFC, PaddingValue, ACL_Type)
    permissions = ConcatenateString(permissions, ACL_PermissionM, PaddingValue, ACL_Type)
    permissions = ConcatenateString(permissions, ACL_PermissionRE, PaddingValue, ACL_Type)
    permissions = ConcatenateString(permissions, ACL_PermissionRE, PaddingValue, ACL_Type)
    permissions = ConcatenateString(permissions, ACL_PermissionLD, PaddingValue, ACL_Type)

Function ConcatenateString(ByVal str As String, ByVal newValue As String, ByVal paddingValue As Integer, ByVal aclType As String) As String

    newValue = newValue.Trim() ' Needed?

    If newValue.Length > 0 Then
        newValue = newValue.PadLeft(paddingValue)

        If str.Length > 0 Then
            str &= ";"
        End If

        str &= String.Format("{0} [{1}]", newValue, aclType)
    End If

    Return str
End Function

检查String.Join和String.Split。一个包含5个如此密切相关的事物的类或列表似乎比5个独立变量或字典甚至一个数组更合适。检查String.Join和String.Split。一个包含5个如此密切相关的事物的类或列表似乎比5个独立变量或字典甚至一个数组更合适虽然一行可以用,但我更喜欢可读性更强的版本;虽然一行程序有效,但我更喜欢可读性更强的版本;你太晚了。另外,如果你至少使用NET4,ToArray是多余的。你太晚了。此外,如果您至少使用NET4,ToArray是多余的。