如果在属性的setter中有这个:
decimal? temp = value as decimal?;
value ="90"
但演员表演后,临时为空 ......
做这个演员的正确方法是什么?
仅当类型相同时,取消装箱才有效!您无法取消object
包含不包含目标值的内容.你需要的是一些东西
decimal tmpvalue; decimal? result = decimal.TryParse((string)value, out tmpvalue) ? tmpvalue : (decimal?)null;
这将查看该值是否可解析为a decimal
.如果是,则将其分配给result
; 否则分配null
.以下代码大致相同,对于不熟悉条件运算符的人来说可能更容易理解?:
:
decimal tmpvalue; decimal? result = null; if (decimal.TryParse((string)value, out tmpvalue)) result = tmpvalue;
你应该解析小数.但是,如果您希望在字符串不正确时将小数设为null,请使用TryParse:
decimal parsedValue; decimal? temp = decimal.TryParse(value, out parsedValue) ? value : (decimal?)null;
这样,在解析格式化的字符串时,您将避免异常.
几乎所有原始类型都提供了从字符串转换的Parse和TryParse方法.
还建议将提供者参数的文化传递给方法,以避免小数分隔符出现问题.如果您正在从另一个系统读取,CultureInfo.InvariantCulture可能是要走的路(但它不是默认的).
bool TryParse(string s, NumberStyles style, IFormatProvider provider, out decimal result)