String.Join忽略空string的方法?

VB.NET方法String.Join(separator, stringArray)类似于PHP的implode,但是数组中的所有null元素被replace为一个空string,所以thatc:

 Dim myArray() as String = { "a", null, "c" } Console.WriteLine(String.Join(", ", myArray)); // Prints "a, , c" 

有没有简单的方法来连接一组string与忽略空string的分隔符?

我不一定需要使用数组或String.Join或其他任何东西。 我只需要以下转换:

 ("a", "b", "c") --> "a, b, c" ("a", null, "c") --> "a, c" 

VB.NET

String.Join(",", myArray.Where(Function(s) Not String.IsNullOrEmpty(s)))

C#

String.Join(",", myArray.Where(s => !string.IsNullOrEmpty(s)))

对于C#==> String.Join(",", arr.Where(s => !String.IsNullOrEmpty(s)));

要在.NET 2.0(无LINQ)中执行,例如SQL-Server ReportingServices,无需为其编写函数:

VB.NET

 Dim a As String = "", b As String = "b", c As String = "", d As String = "d", e As String = "" Dim lala As String = String.Join(" / ", String.Join(vbBack, New String() {a, b, c, d, e}).Split(New Char() {ControlChars.Back}, System.StringSplitOptions.RemoveEmptyEntries)) System.Console.WriteLine(lala) 

C#(对于那些从谷歌login和不searchVB.NET)

 string a = "", b = "b", c = "", d = "d", e = ""; string lala = string.Join(" / ", string.Join("\u0008", new string[] { a, b, c, d, e } ).Split(new char[] { '\u0008' }, System.StringSplitOptions.RemoveEmptyEntries) ); System.Console.WriteLine(lala); 

这假定字符退格不会出现在你的string中(通常应该是真的,因为你不能简单地通过键盘input这个字符)。

另外,如果您从数据库中获取值,则更简单,因为您可以直接在SQL中执行此操作:

PostgreSQL和MySQL:

 SELECT concat_ws(' / ' , NULLIF(searchTerm1, '') , NULLIF(searchTerm2, '') , NULLIF(searchTerm3, '') , NULLIF(searchTerm4, '') ) AS RPT_SearchTerms; 

即使有光荣的MS-SQL服务器,这是可能的(PS:这是讽刺):

 DECLARE @in_SearchTerm1 nvarchar(100) DECLARE @in_SearchTerm2 nvarchar(100) DECLARE @in_SearchTerm3 nvarchar(100) DECLARE @in_SearchTerm4 nvarchar(100) SET @in_SearchTerm1 = N'a' SET @in_SearchTerm2 = N'' SET @in_SearchTerm3 = N'c' SET @in_SearchTerm4 = N'' SELECT COALESCE ( STUFF ( ( SELECT ' / ' + RPT_SearchTerm AS [text()] FROM ( SELECT NULLIF(@in_SearchTerm1, N'') AS RPT_SearchTerm, 1 AS RPT_Sort UNION ALL SELECT NULLIF(@in_SearchTerm2, N'') AS RPT_SearchTerm, 2 AS RPT_Sort UNION ALL SELECT NULLIF(@in_SearchTerm3, N'') AS RPT_SearchTerm, 3 AS RPT_Sort UNION ALL SELECT NULLIF(@in_SearchTerm4, N'') AS RPT_SearchTerm, 4 AS RPT_Sort ) AS tempT WHERE RPT_SearchTerm IS NOT NULL ORDER BY RPT_Sort FOR XML PATH(N''), TYPE ).value('.', 'nvarchar(MAX)') ,1 ,3 ,N'' ) ,N'' ) AS RPT_SearchTerms