string.joinドロップnull値は、配列内の要素の数よりも少ないアイテムを返す

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] null
3]ヌル
4]「ロングボート」

その配列を使用して、結合された文字列は作成されています...

"0001020003、ボブ・ジョーンズ、ロングボート"

役に立ちましたか?

解決

Enumerable.Union 複製を除外するため、1つの空白のインスタンスを返しているだけです。

使用してみてください Concat 代わりは。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top