C# 将位合并为一个字符串

C# 将位合并为一个字符串,c#,string,concat,C#,String,Concat,我想把一些东西浓缩成一个。我有这个方法: public BitArray Encode(string source) { List<bool> encodedSource = new List<bool>(); for (int i = 0; i < source.Length; i++) { List<bool> encodedSymbol = this.Root.Traverse(source[i], new

我想把一些东西浓缩成一个。我有这个方法:

public BitArray Encode(string source)
{
    List<bool> encodedSource = new List<bool>();

    for (int i = 0; i < source.Length; i++)
    {
        List<bool> encodedSymbol = this.Root.Traverse(source[i], new List<bool>());
        encodedSource.AddRange(encodedSymbol);
    }

    BitArray bits = new BitArray(encodedSource.ToArray());

    return bits;
}
现在,我只是为每一位显示一个MessageBox,但我如何才能将所有位合并到一个MessageBox中,这可能是一个愚蠢的问题,但我无法将我的头脑集中在它上。

使用StringBuilder

StringBuilder tmp = new StringBuilder(encoded.Count)
foreach (bool bit in encoded)
{
    tmp.Append(bit ?"1": "0"));
}
MessageBox.Show(tmp.ToString());

这将可视化您需要执行的操作:

它基本上是遍历所有条目,并根据条目将1或0添加到列表中

    public static string ConcatList(List<bool> list)
    {
        StringBuilder builder = new StringBuilder();
        foreach (bool b in list)
        {
            builder.Append(b == true ? "1" : "0";
        }
        return builder.ToString();
    }
我的建议是:

string bitString = string.Empty;
foreach (bool bit in encodedSource)
{
  bitString = string.Concat(bitString, (bit ? "1" : "0"));
}

下面是BitArray上的一个扩展方法,它应该可以做到这一点:

public static class BitArrayExtensions
{
    public static string ToBitString(this BitArray encoded)
    {
        if (encoded == null)
        {
            return string.Empty;
        }

        var sb = new StringBuilder(encoded.Count);

        foreach (bool bit in encoded)
        {
            sb.Append(bit ? "1" : "0");
        }

        return sb.ToString();
    }
}
在代码中使用以下内容:

MessageBox.Show(encoded.ToBitString());

所有字符串连接的潜在性能问题。StringBuilder的其他答案避免了这一点。
public static class BitArrayExtensions
{
    public static string ToBitString(this BitArray encoded)
    {
        if (encoded == null)
        {
            return string.Empty;
        }

        var sb = new StringBuilder(encoded.Count);

        foreach (bool bit in encoded)
        {
            sb.Append(bit ? "1" : "0");
        }

        return sb.ToString();
    }
}
MessageBox.Show(encoded.ToBitString());