我有一个自定义WebControl
它实现了.Value
的getter / setter返回可空<小数>
这是一个客户端的过滤文本框(的一个子类TextBox
与包括JavaScript和用于设置一些服务器侧逻辑/获取的值)
这里是吸气和从控制二传手:
public decimal? Value
{
get
{
decimal amount = 0;
if (!decimal.TryParse(this.Text, NumberStyles.Currency, null, out amount))
{
return null;
}
else
{
return amount;
}
}
set
{
if (!value.HasValue)
{
this.Text = "";
}
else
{
this.Text = string.Format("${0:#,##0.00}", value);
}
}
}
那我看到的问题是,从这个语句的输出:
decimal Amount = uxAmount.Value ?? 0M;
我看到的量被设定为“0”时, uxAmount.Value
返回10000。
这个工作如我所料(借口在外壳的变化):
decimal? _Amount = uxAmount.Value;
decimal amount = _Amount ?? 0;
我也看到了这种行为(最近)调用与空合并运算符一起在LINQ2SQL数据上下文定义的UDF功能时,这是我知道我的UDF调用返回的预期值,但我得到的RHS值来代替。
另外困惑我,如果我在手表评估uxAmount.Value,我得到的类型的10000 Nullable<decimal>
。
这里有一些表情我已经试过:
decimal? _Amount = uxAmount.Value; //10000
decimal amount = _Amount ?? 0; //10000
decimal amount2 = _Amount ?? 0M; //10000
decimal Amount = uxAmount.Value ?? 0M; //0
然后,我添加这个表达式按照上述4
decimal amount3 = (uxTaxAmount.Value) ?? 0M;
现在
decimal Amount = uxAmount.Value ?? 0M; //10000
decimal amount3 = (uxAmount.Value) ?? 0M; //0
这似乎是最后一次通话是始终为0,但价值uxAmount.Value
(被解析出来的.Text
按上述方法使用的getter / setter TryParse
是稳定的。我在断点处停止,而且也没有其他线程可以操纵这个值。
注意使用m后缀的强制常数为十进制数,因为它是整数,我怀疑一个类型转换的问题。
有任何想法吗?
无论是LHS和RHS的价值似乎是稳定而着称。
- 编辑从VS2010一些screengrabs