Ответ 1
Попробуйте следующее:):
var res = string.Join(",", array.Where(s => !string.IsNullOrEmpty(s)));
Это будет соединяться только с строками, которые не являются null
или ""
.
Я конвертирую массив в строку, используя String.Join
. У меня небольшая проблема в том, что в массиве некоторые позиции индекса будут пустыми. Пример ниже:
array[1] = "Firstcolumn"
array[3] = "Thirdcolumn"
Используя String.Join(",", array); я получу следующее:
Firstcolumn, Thirdcolumn
Обратите внимание на дополнительные ,.
Как я могу удалить лишние запятые из строки или в идеале не включать пустые индексы при использовании String.Join?
Попробуйте следующее:):
var res = string.Join(",", array.Where(s => !string.IsNullOrEmpty(s)));
Это будет соединяться только с строками, которые не являются null
или ""
.
Простым решением было бы использовать linq, отфильтровывая пустые элементы перед присоединением.
// .net 3.5
string.Join(",", array.Where(item => !string.IsNullOrEmpty(item)).ToArray());
В .NET 4.0 вы также можете использовать string.IsNullOrWhiteSpace
, если вы также хотите отфильтровать элементы, которые пусты или состоят из (обратите внимание, что в .NET 4.0 вам не нужно вызывать ToArray
в этом случае):
// .net 4.0
string.Join(",", array.Where(item => !string.IsNullOrWhiteSpace(item)));
Вы можете использовать linq для удаления пустых полей.
var joinedString = String.Join(",", array.Where(c => !string.IsNullOrEmpty(c));
Метод расширения:
public static string ToStringWithoutExtraCommas(this object[] array)
{
StringBuilder sb = new StringBuilder();
foreach (object o in array)
{
if ((o is string && !string.IsNullOrEmpty((string)o)) || o != null)
sb.Append(o.ToString()).Append(",");
}
sb.Remove(sb.Length - 1, 1);
return sb.ToString();
}
Регулярное выражение:
yourString = new Regex(@"[,]{2,}").Replace(yourString, @",");
String.Join(",", array.Where(w => !string.IsNullOrEmpty(w));
string.Join(",", Array.FindAll(array, a => !String.IsNullOrEmpty(a)));
Как насчет этого? Минусы и плюсы по сравнению с решением LINQ? По крайней мере, он короче.
string.Join(",", string.Join(",", array).Split({","}, StringSplitOptions.RemoveEmptyEntries));
v ( '_') В
Простой способ расширения
namespace System
{
public static class Extenders
{
public static string Join(this string separator, bool removeNullsAndWhiteSpaces, params string[] args)
{
return removeNullsAndWhiteSpaces ? string.Join(separator, args?.Where(s => !string.IsNullOrWhiteSpace(s))) : string.Join(separator, args);
}
public static string Join(this string separator, bool removeNullsAndWhiteSpaces, IEnumerable<string> args)
{
return removeNullsAndWhiteSpaces ? string.Join(separator, args?.Where(s => !string.IsNullOrWhiteSpace(s))) : string.Join(separator, args);
}
}
}
Использование:
var str = ".".Join(true, "a", "b", "", "c");
//or
var arr = new[] { "a", "b", "", "c" };
str = ".".Join(true, arr);