2010-06-20 67 views
1

我有一个简单的条件,并希望与?:关键字实现它,但编译器不让我。这是确切的样品如何使用?字符串的关键字

// 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; 

这些采样脸,错误的bith。

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

+1

由于Oak表示IsNullOrEmpty不是一个属性,它是一种静态方法。 看来你想要将一个字符串转换为小数,如果它有一个值(非空或空),如果值不能转换为小数,可能导致InvalidCastException。因此,我建议使用更清晰和更安全的方法(比如Anthony Pegram说的)。这种方法的优点是它显示了什么意图完成,例如默认值已被故意选择或引发了自定义异常 – Beatles1692 2010-06-20 06:09:07

回答

6

考虑改变为类似

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

当然,如果你想扔在一个无效/缺少输入一个例外,你可以简单地使用.Parse方法来代替,它会抛出一个您。但使用.TryParse将允许您自定义异常的消息,或者简单地以另一种方式处理它,例如重新提示用户。

0

我这个说法

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

该声明并不真正解决它。在这里,你要说的是,如果文本框中没有任何内容,请将其转换为小数。否则,使它为0.看到一个问题? – 2010-06-20 05:36:55

+0

@Anthony - 其实我写的是这样,我有一个错误 - 谢谢你的考虑。我纠正它为新的commers。 – 2010-06-20 06:20:11

3

String.IsNullOrEmpty固定它是一种方法,而不是一个领域。所以正确的用法是String.IsNullOrEmpty(textbox1.Text)