【发布时间】:2011-06-19 19:26:17
【问题描述】:
也许这是一个简单的问题,但我正在尝试所有的转换方法!它仍然有错误! 你会帮我吗?
十进制? (可为空的小数)转十进制
【问题讨论】:
标签: c# .net decimal type-conversion nullable
也许这是一个简单的问题,但我正在尝试所有的转换方法!它仍然有错误! 你会帮我吗?
十进制? (可为空的小数)转十进制
【问题讨论】:
标签: c# .net decimal type-conversion nullable
有很多选择...
decimal? x = ...
decimal a = (decimal)x; // works; throws if x was null
decimal b = x ?? 123M; // works; defaults to 123M if x was null
decimal c = x.Value; // works; throws if x was null
decimal d = x.GetValueOrDefault(); // works; defaults to 0M if x was null
decimal e = x.GetValueOrDefault(123M); // works; defaults to 123M if x was null
object o = x; // this is not the ideal usage!
decimal f = (decimal)o; // works; throws if x was null; boxes otherwise
【讨论】:
GetValueOrDefault,因为它不依赖于 C# 语法,因此也可以在 VB.NET 中使用。它也很容易调整,以防类型的默认值不适合您。
尝试使用?? 运算符:
decimal? value=12;
decimal value2=value??0;
当decimal? 为空时,0 是您想要的值。
【讨论】:
你不需要转换一个可以为空的类型来获取它的值。
您只需利用Nullable<T> 公开的HasValue 和Value 属性。
例如:
Decimal? largeValue = 5830.25M;
if (largeValue.HasValue)
{
Console.WriteLine("The value of largeNumber is {0:C}.", largeValue.Value);
}
else
{
Console.WriteLine("The value of largeNumber is not defined.");
}
或者,您可以使用 C# 2.0 或更高版本中的 null coalescing operator 作为快捷方式。
【讨论】:
如果decimal? 是null,这取决于您要做什么,因为decimal 不能是null。如果您想将其默认为 0,您可以使用以下代码(使用 null 合并运算符):
decimal? nullabledecimal = 12;
decimal myDecimal = nullabledecimal ?? 0;
【讨论】:
你可以使用。
decimal? v = 2;
十进制 v2 = Convert.ToDecimal(v);
如果值为空(v),则将其转换为0。
【讨论】: