string.join 삭제 널 값 드롭 배열의 요소 수보다 적은 항목을 반환합니다.

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

  •  25-08-2022
  •  | 
  •  

문제

이 방법이 주어지면 생성 된 생성 문자열은 연속 널 값을 떨어 뜨립니다. th ?? 아래에서 잘못 사용 되는가? 마치 반환하기 전에 상관없이 인덱스 된 모든 널 값을 연결하는 것처럼 행동합니다.

 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] 널
3] 널
4] "Longboat"

해당 배열로 결합 된 문자열은 ...

"0001020003, 밥 존스, 롱 보트"

도움이 되었습니까?

해결책

Enumerable.Union 복제물을 제외하므로 단일 빈 인스턴스 만 반환합니다.

사용해보십시오 Concat 대신에.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top