String.join сбрасывает нулевые значения, возвращающие меньше элементов, чем количество элементов в массиве

StackOverflow https://stackoverflow.com/questions/20354044

  •  25-08-2022
  •  | 
  •  

Вопрос

Учитывая этот метод, созданная строка, созданная строка, отбрасывает последовательные нулевые значения. Есть ?? Используется неправильно ниже? Он ведет себя так, как будто это соглашает все конспективно индексированные нулевые значения перед возвратом

 public static IEnumerable<string> ToCsv<T>(string separator, IEnumerable<T> objectlist)
        {
            FieldInfo[] fields = typeof(T).GetFields();
            PropertyInfo[] properties = typeof(T).GetProperties();
            yield return String.Join(separator, fields.Select(f => f.Name).Union(properties.Select(p => p.Name)).ToArray());
            foreach (var o in objectlist)
            {
                var pp = properties.Select(
                    p => (p.GetValue(o, null) ?? String.Empty));

                var val = string.Join(separator, fields.Select(f => (f.GetValue(o)).ToString() )
                    .Union(pp).ToArray());
                ;
                yield return val;
            }
        }

Вот мой массив

[0]"0001020003"
1] "Боб Джонс"
2] NULL
3] Нуль
4] "Лонгбот"

С этим массивом созданная соединенная строка - это ...

"0001020003, Боб Джонс, Longboat"

Это было полезно?

Решение

Enumerable.Union Исключает дубликаты, поэтому вы получаете только один пустой экземпляр.

Попробуйте использовать Concat вместо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top