【问题标题】:Cannot concat string in C#无法在 C# 中连接字符串
【发布时间】:2018-10-14 16:29:25
【问题描述】:

我有一个读取 MIFARE 卡内数据块的代码。

rfidM1.ReadDataFromCardM1 方法将读取一个块并返回string 中的值。

string memQuery = string.Empty;
int i = 0, j = 0;
sector = 4;
block = 4;

for (i = 0; i < block; i++)
{
    for (j = 0; j < sector; j++)
    {                  
        memQuery += rfidM1.ReadDataFromCardM1(Convert.ToByte(j), Convert.ToByte(i), _Key1) + ",";
    }
}          

我的意图是用逗号连接memQuery。此处的示例输出:

,0,,,,,True,,C0-12320,0,,,,,,

我用各种方式连接memQuery,例如,使用+=StringBuilderArrayList,但它们不起作用,因为当我将它放入 MessageBox 时它总是有这样的输出。

,0

看起来0 后面的字符串不能与后面的其他字符串连接。为什么?

【问题讨论】:

  • 尝试使用List&lt;string&gt;(包含真实字符串)而不是ArrayList(仅包含objects)
  • 我对 memQuery.Add 感到困惑。那是收藏吗?尝试重构您的代码。 variables 和您想要连接到该字符串的值是什么? K ?你在附近,.ToString().Replace() 附近闻起来很奇怪。尝试为每个目的创建不同的方法,以便更容易调试问题。
  • OT 声明for 语句的索引变量的常用方法是在其中:for (int i=0; ...。如果这是您真正需要的,您也可以将其声明为 byte
  • @HansKesting 我用 List 试了一下,得到了同样的结果。
  • 如果memQuery[k] 返回null,当尝试对其执行任何方法时,例如GetType() 或ToString(),您将得到NullReferenceException。 ReadDataFromCardM1 是否可以返回 nulls 或控制字符?

标签: c# string concatenation


【解决方案1】:

我的意图是用逗号连接 memQuery

嗯,先把 ArrayList 去掉,换成var memQuery = new List&lt;string&gt;();

在你的 for 循环中,决定如何处理 null 或空结果。添加null 或跳过添加或...

然后当memQuery填写正确后,就可以做

 string result = string.Join(",", memQuery);

string.Join() 可以处理输入序列中的nulls。

【讨论】:

  • 感谢您的回答。原来那些返回字符串里面有控制字符。我按照这个线程 stackoverflow.com/a/15259355/4535654 删除了它们,它现在可以工作了。
  • 那么也许它们根本就不是字符串...这完全取决于您要显示的内容。
猜你喜欢
  • 2018-03-02
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多