Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 把一个物体抛成两倍_C#_.net - Fatal编程技术网

C# 把一个物体抛成两倍

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(

我继承了以下初始化结构,其中我的参数是一个双数:

但当对象是不同的数字类型时,如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]);
}

另一种选择是使用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
    }   
}