【问题标题】:check string for nothing and then for certain value in 1 line?检查字符串是否为空,然后检查 1 行中的某个值?
【发布时间】:2008-12-23 22:38:03
【问题描述】:

我似乎总是查看一个字符串(通常是查询字符串的值)是否有一个值,但首先我必须先检查它是否不是空的,所以我最终得到 2 个 if then 语句 - 我是否在这里遗漏了一些东西 - 必须做一个更好的方法:

If Not String.IsNullOrEmpty(myString) Then
  If CBool(myString) Then
   //code
   End If
End If

【问题讨论】:

  • 问题是我得到一个 Invalid Cast Exception 因为 myString 在应用 Cbool 时什么都不是,这是错误: > 从字符串“”转换为类型 > 'Boolean' 无效。
  • 只是一个建议,您应该使用 Boolean.TryParse 检查有效的字符串/布尔转换,然后使用 Boolean.Parse 实际解析它们。为了习惯 .Net,最好开始使用 .Net 方法而不是 Visual Basic 旧版“帮助程序”。

标签: asp.net vb.net string


【解决方案1】:

在 VB.Net 中,并且不会短路,但 AndAlso 会。

(Or 和 OrElse 相同)

所以你的代码应该看起来像

If Not String.IsNullOrEmpty(myString) AndAlso CBool(myString) Then 
    ....
End If

【讨论】:

    【解决方案2】:

    您选择的语言中的布尔“和”运算符?条件通常会短路,因此如果第一个失败,第二个将不会运行/出错。

    【讨论】:

    • 你想检查 vb.net 短路... vbscript 没有。 (巨大的烦恼)
    【解决方案3】:

    AndAlso(如前所述)是最通用的答案。但是,您也可以使用各种 TryParse 方法,这将使代码如下:

    Dim b as Boolean
    If Boolean.TryParse(myString, b) AndAlso b Then
    End If
    

    奖励,当有人在您的查询字符串中发送“blah”时,它会将您从 FormatException 中解救出来。

    【讨论】:

    • 投反对票,因为“AndAlso b”正在评估 b 是否为真。它应该简单地阅读: Dim b as Boolean If Boolean.TryParse(myString, b) Then End If
    • @Russ - 不, AndAlso b (大部分)等同于原始 If CBool​​(myString) 行。在这种情况下,您需要两者。
    • 你运行代码了吗?因为我做到了,而且我说的是真的。你不需要“AndAlso b”
    • 如果 myString 为“False”,那么您需要 AndAlso b,否则您将运行内部块 - 而原始代码不会。
    【解决方案4】:

    仅供参考,这种类型的代码非常适合作为“扩展方法”。简而言之,这意味着您可以使用提供自己代码的方法来扩展字符串。

    查一下:)

    【讨论】:

    • 但是您不能使用静态方法扩展类型(尽管我认为 F# 允许这样做)。所以你不能有 String.IsNotNullOrEmptyOrFalse() - 但你可以有 "abcd".IsNotNullOrEmptyOrFalse()。但是,如果您将其称为 null 对象,那只会令人困惑。
    • 是的,你可以——我已经编写了许多类型的扩展方法:String.IsEmail()、String.IsDecimal()、String.IsDate 等——这就是扩展方法的重点: “扩展方法使您能够在现有类型中“添加”方法,而无需创建新的派生类型”
    • @Zhaph - 扩展在类型的 instance 之外。意思是,您可以将其称为“abcd”.IsEmail()。你不能做像 String.IsEmail("abcd") 这样的扩展。因此,如果您有一个空字符串,您的代码将有效地读取 null.IsNotNullOrEmptyOrFalse。这很奇怪(尽管是合法的)。
    【解决方案5】:

    如果使用 .NET 2.0 或更高版本,请使用以下内容:

    String.IsNullOrEmpty(thestringobject)
    

    将评估为 True 或 False,具体取决于。 我通常在实用程序类中创建另一个函数来执行此检查并检查修剪/长度,以便我知道字符串对象是 null、空还是一堆空白。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 2022-12-31
      • 2014-09-22
      • 1970-01-01
      相关资源
      最近更新 更多