【问题标题】:How to check if a StringBuilder is empty?如何检查 StringBuilder 是否为空?
【发布时间】:2018-01-08 01:10:04
【问题描述】:

我想测试StringBuilder 是否为空但没有IsEmpty 方法或属性。

如何确定这一点?

【问题讨论】:

  • sb.Length == 0 ?
  • @LasseV.Karlsen 哇,这么简单:/ 对不起,我是 C# 的初学者。
  • intellisense 说“获取或设置 stringbuilder 对象的长度”这一事实,以及构造函数将容量作为参数的事实以及无法设置长度的事实一个现有的字符串都结合在一起,导致人们相信 Length 可能反映了容量。它是答案的事实非常不直观。

标签: c# conditional-statements stringbuilder


【解决方案1】:

如果您查看documentation of StringBuilder,它只有 4 个属性。其中之一是Length

StringBuilder 对象的长度由其 Char 对象的数量定义。

您可以使用Length 属性:

获取或设置当前 StringBuilder 对象的长度。

StringBuilder sb = new StringBuilder();

if (sb.Length != 0)
{
    // you have found some difference
}

另一种可能性是使用String.IsNullOrEmpty 方法将其视为字符串,并使用ToString 方法将构建器压缩为字符串。您甚至可以获取结果字符串并将其分配给一个变量,如果您发现一些差异,您将使用该变量:

string difference = ""; 

if (!String.IsNullOrEmpty(difference = sb.ToString()))
{
    Console.WriteLine(difference);      
}

【讨论】:

  • 很容易输入public bool Empty { get; } = this.Length == 0;。奇怪的是他们没有这个想法。
  • @Boiethios 是真的,我一直想知道他们为什么不实现这样的东西。
  • 这对于枚举也是一样的:stackoverflow.com/questions/18867180/…
  • 我认为这是因为长度属性是可写的。因此,您可以限制 stringbuilder 在调用 toString 方法时将解析为字符串的字符数量。所以我什至不知道什么时候该信任 kength 财产。此处发布的代码非常好,因为它依赖于 stringbuilder 的实际输出
  • @RickerSilva 这是一个很好的观点。其实情况更糟。如果您设置了Length 属性,那么StringBuilder 将用0x00 字符填充它直到该点。如果您添加 then adterwards 字符串,它们将被附加到零十六进制字符串。如果设置了Length 属性,那么不幸的是string.IsNullOrWhiteSpace(sb.ToString())string.IsNullOrEmpty(sb.ToString()) 方法也停止工作
【解决方案2】:

使用StringBuilder.Length 属性,这里是doc

if (mySB.Length > 0)
{
     Console.WriteLine("Bang! is not empty!"); 
}

【讨论】:

    【解决方案3】:

    使用这个,它会工作:

    StringBuilder stringbuilder = new StringBuilder();
    if(string.isnullorempty(Convert.toString(stringbuilder)))
    

    【讨论】:

      猜你喜欢
      • 2017-11-15
      • 2020-05-29
      • 2018-04-02
      • 2016-04-05
      • 2020-09-25
      • 2012-01-15
      • 2016-07-16
      • 2021-08-14
      • 2021-10-14
      相关资源
      最近更新 更多