当前位置:  开发笔记 > 编程语言 > 正文

将对象转换为十进制?(可以为十进制)

如何解决《将对象转换为十进制?(可以为十进制)》经验,为你挑选了2个好方法。

如果在属性的setter中有这个:

decimal? temp = value as decimal?;

value ="90"

但演员表演后,临时为 ......

做这个演员的正确方法是什么?



1> Konrad Rudol..:

仅当类型相同时,取消装箱才有效!您无法取消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;


我不会在这里使用"相同"这个词.例如,您可以在枚举类型及其基础类型T和T?以及其他一些奇怪的案例IIRC之间取消装箱.CLR比人们预期的更宽松.

2> thinkbeforec..:

你应该解析小数.但是,如果您希望在字符串不正确时将小数设为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)


这个答案是不正确的,因为为'temp'分配'value'是行不通的.它应该是 ?parsedValue :(十进制?)null;
推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有