【问题标题】:How to use ? keyword for string如何使用 ?字符串的关键字
【发布时间】:2011-03-05 22:23:14
【问题描述】:

我有一个简单的条件,想用?: 关键字实现它,但编译器不让我这样做。这是准确的样本

// in asp page decleration
<ajaxtoolkit:FilteredTextBoxExtender id="ftbeNumeric" runat="server" TargetControlID="textbox1" FilterType="Numbers" />
<asp:TextBox ID="textbox1" runat="server" />

// in code behind 
decimal x = textbox1.Text != string.IsNullOrEmpty ? Convert.ToDecimal(textbox1.Text) : 0;

我也试试这个

// in code behind 
decimal x = Convert.ToDecimal(textbox1.Text) != 0 ? Convert.ToDecimal(textbox1.Text) : 0;

这些样本中的 bth 有错误。

如何用?: 关键字定义这个?并注意textbox.text` 可能为空。

【问题讨论】:

  • 正如 Oak 所说,IsNullOrEmpty 不是属性,而是静态方法。如果字符串有一个值(不是 null 或空),您似乎想将其转换为小数,如果值不能转换为小数,则可能导致 InvalidCastException。因此我建议使用更清晰和更安全的方法(就像 Anthony Pegram 说的那样)。这种方法的优点是它显示了要做什么,例如故意选择默认值或抛出自定义异常

标签: c# asp.net conditional conditional-operator


【解决方案1】:

我用这个语句修复了它

string.IsNullOrEmpty(textbox1.Text) ? 0 : Convert.ToDecimal(textbox1.Text);

【讨论】:

  • 那句话并没有真正修复它。在其中,您是说如果文本框中没有任何内容,请将其转换为小数。否则,将其设为 0。看到问题了吗?
  • @Anthony - 实际上我写在那里是为了我有一个错误 - 谢谢你的考虑。我为新人纠正它。
【解决方案2】:

考虑将其更改为类似

decimal x;
if (!decimal.TryParse(textbox1.Text, out x))
{
    // throw an exception?
    // set it to some default value?
}

当然,如果您想对无效/丢失的输入抛出异常,您可以简单地使用 .Parse 方法,它会为您抛出异常。但是使用 .TryParse 将允许您自定义异常的消息或简单地以另一种方式处理它,例如重新提示用户。

【讨论】:

    【解决方案3】:

    String.IsNullOrEmpty 是一个方法,而不是一个字段。所以正确的用法是String.IsNullOrEmpty(textbox1.Text)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-25
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 2014-06-04
      • 2019-06-15
      • 1970-01-01
      相关资源
      最近更新 更多