C# 把一个物体抛成两倍
我继承了以下初始化结构,其中我的参数是一个双数: 但当对象是不同的数字类型时,如int,则中断,如下所示:C# 把一个物体抛成两倍,c#,.net,C#,.net,我继承了以下初始化结构,其中我的参数是一个双数: 但当对象是不同的数字类型时,如int,则中断,如下所示: dict[MY_KEY] = 1; 如何更改我的方法,使其适用于所有可以隐式转换为double的数值类型 只要dict[MY_KEY]不为null,如果为null,将引发异常。使用方法,而不是显式强制转换它 public void Init(IDictionary<string, object> dict) { double val = Convert.ToDouble(
dict[MY_KEY] = 1;
如何更改我的方法,使其适用于所有可以隐式转换为double的数值类型
只要dict[MY_KEY]不为null,如果为null,将引发异常。使用方法,而不是显式强制转换它
public void Init(IDictionary<string, object> dict)
{
double val = Convert.ToDouble(dict[MY_KEY]);
}
另一种选择是使用TryParse方法。这是一个更好的选择,因为该方法是公共的,并且您正试图将一个对象转换为double,如果正常的显式或隐式转换失败,它将抛出一个异常
public void Init(IDictionary<string, object> dict)
{
double val;
if (!double.TryParse(dict[MY_KEY].ToString(), out val))
{
// Handle parse failure if necessary.
// On failure, the return value of val will be 0
}
}
如果有兴趣了解更多细节,请参阅MSDN文档:
当然,如果可能的话,将参数中的type改为double而不是Servy提到的object将是最好的选择,这样就不必执行任何转换。如果可能的话,我强烈建议您不要一开始就把自己放在这个位置上。如果你需要一个双倍数字,强迫人们输入一个双倍数字,而不是接受任何可能的数字类型并试图将其转换为双倍数字。否则,你会让自己陷入一个充满伤害的世界。请记住,所有数字类型都有一组不同的数字可以表示。有人可以输入一个数字,如果要转换成双倍数字,就需要丢失信息,这是他们所不希望的。下面的答案似乎是一颗神奇的子弹,但事实并非如此。
double val = Convert.ToDouble(dict[MY_KEY]);
public void Init(IDictionary<string, object> dict)
{
double val = Convert.ToDouble(dict[MY_KEY]);
}
public void Init(IDictionary<string, object> dict)
{
double val;
if (!double.TryParse(dict[MY_KEY].ToString(), out val))
{
// Handle parse failure if necessary.
// On failure, the return value of val will be 0
}
}