使用 Decimal 时抛出异常?类型
CastException while using Decimal? type
在我的场景中我需要绑定 Decimal?输入 属性 加倍?输入 属性.
这是使用 Double 的简单代码?
public class Model
{
private double? id = null;
public double? ID
{
get { return id; }
set { id = value; }
}
}
和我的Xaml
<TextBox x:Name="db" Width="100" Height="{Binding Path=ID}" />
这没有任何问题,
但如果我将 ID 类型更改为十进制?喜欢,
public class Model
{
private decimal? id = null;
public decimal? ID
{
get { return id; }
set { id = value; }
}
}
它抛出异常(需要在VS中启用所有异常)。这种行为背后有什么具体原因吗?
异常详情:
System.InvalidCastException occurred _HResult=-2147467262
_message=Null object cannot be converted to a value type. HResult=-2147467262 IsTransient=false Message=Null object cannot
be converted to a value type. Source=mscorlib StackTrace:
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) InnerException:
谢谢
添加命名空间xmlns:sys="clr-namespace:System;assembly=mscorlib"
并使用这个:
<TextBox x:Name="db" Width="100" Height="{Binding ID, TargetNullValue={x:Static sys:String.Empty}}"/>
所以,原因是异常中写的:
Null object cannot be converted to a value type
当它试图从您的小数中生成双精度值(对于 "Height" 属性)时,转换方法 ("System.Convert.ChangeType") 不知道如何处理空(可用)值。由于当 属性 ("double?") 的类型和绑定 属性 ("ID") 的类型相同时,永远不会调用此方法,因此您永远不会遇到此错误你原来的环境。
在我的场景中我需要绑定 Decimal?输入 属性 加倍?输入 属性.
这是使用 Double 的简单代码?
public class Model
{
private double? id = null;
public double? ID
{
get { return id; }
set { id = value; }
}
}
和我的Xaml
<TextBox x:Name="db" Width="100" Height="{Binding Path=ID}" />
这没有任何问题, 但如果我将 ID 类型更改为十进制?喜欢,
public class Model
{
private decimal? id = null;
public decimal? ID
{
get { return id; }
set { id = value; }
}
}
它抛出异常(需要在VS中启用所有异常)。这种行为背后有什么具体原因吗?
异常详情:
System.InvalidCastException occurred _HResult=-2147467262
_message=Null object cannot be converted to a value type. HResult=-2147467262 IsTransient=false Message=Null object cannot be converted to a value type. Source=mscorlib StackTrace: at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) InnerException:
谢谢
添加命名空间xmlns:sys="clr-namespace:System;assembly=mscorlib"
并使用这个:
<TextBox x:Name="db" Width="100" Height="{Binding ID, TargetNullValue={x:Static sys:String.Empty}}"/>
所以,原因是异常中写的:
Null object cannot be converted to a value type
当它试图从您的小数中生成双精度值(对于 "Height" 属性)时,转换方法 ("System.Convert.ChangeType") 不知道如何处理空(可用)值。由于当 属性 ("double?") 的类型和绑定 属性 ("ID") 的类型相同时,永远不会调用此方法,因此您永远不会遇到此错误你原来的环境。