string.join在null时追加字符

时间:2015-02-20 17:34:04

标签: c# linq concatenation

我使用string.join连接字符串,我想追加?每当连接字符串中有NULL时。

现在它显示如下:

a,b,c,,e

我想这样表现出来:

a,b,c,?,e

LINQ:

    var listStr = (from c in cc.ccValues select c.ccValue).ToList();
    return string.Join(",", listStr);

3 个答案:

答案 0 :(得分:3)

这很简单,您只需事先预测数据。

假设您使用IEnumerable<string>作为data

// replace null with "?"
var normalizedData = data.Select(s => s ?? "?");

return string.join(",", normalizedData);

答案 1 :(得分:2)

只需用“?”替换null。

var strings = new List<string>{"a","b","c",null,"e"};
String.Join(",", strings.Select(s => s == null ? "?" : s));

<强>更新

只获取每个字符串一次,但用“?”替换每个空字符串您可以将LINQ Distinct与自定义IEqualityComparer<T>一起使用。

var str = String.Join(",", strings.Distinct(new NullStringsAreDistinctComparer()).Select(s => s == null ? "?" : s));

比较器可能如下所示:

class NullStringsAreDistinctComparer : IEqualityComparer<string> {

    public bool Equals(string x, string y) {
        return (x == null) ? y != null : x.Equals(y, StringComparison.InvariantCulture);
    }

    public int GetHashCode(string obj) {
        return (obj == null) ? 0 : obj.GetHashCode();
    }
}

答案 2 :(得分:0)

string a ="a,b,c,,e,f,,h";
a.Replace(",,",",?,");

output : a,b,c,?,e,f,?,h

<强> .NetFiddle