从分钟转换为毫秒,然后转换为整数

时间:2018-07-04 04:46:14

标签: c# .net

我正在尝试运行以下转换,导致无效的强制转换异常

  

指定的演员表无效

settings.ActionTimer = Convert.ToInt32(TimeSpan.FromMinutes((double)ActionTimerComboBox.SelectedValue).TotalMilliseconds);

这是什么?

  1. ActionTimerComboBox.SelectedValue的值(在本例中为“ 13”,然后将其从对象转换为双精度,以便可以将TimeSpan.FromMinutes()应用于该值。
  2. 将“ 13分钟”转换为毫秒。
  3. 将int settings.ActionTimer更新为毫秒转换后的值,该值应为“ 780000”。

我该怎么做?

3 个答案:

答案 0 :(得分:3)

除从ActionTimerComboBox.SelectedValue到double的转换外,其他一切看起来都不错。那就是错误信息也说的。您必须使用以下内容:

string comboSelectedValue = ActionTimerComboBox.SelectedValue;
double selectedVal =0.0;
if(double.TryParse(comboSelectedValue, out selectedVal)){
    settings.ActionTimer = (int)TimeSpan.FromMinutes(selectedVal).TotalMilliseconds;
    Console.WriteLine(TimeSpan.FromMinutes(selectedVal).TotalMilliseconds);
}
else
{
    Console.WriteLine("Error in conversion");
}

工作示例HERELink可以帮助您进一步了解类型转换。

答案 1 :(得分:2)

ActionTimerComboBox.SelectedValue返回的字符串,您不能将其转换为double, 您应该尝试使用double.Parse(),double.TryParse()或此处使用的Convert类。 -抱歉无法发表评论

答案 2 :(得分:0)

此异常来自以下语句:

((double)ActionTimerComboBox.SelectedValue)

对象到Double的转换将引发无效的强制转换异常。 要么先将此对象转换为字符串,然后再将其转换为double。

((double)ActionTimerComboBox.SelectedValue.toString());

或者,您也可以使用以下代码:

var val = ActionTimerComboBox.SelectedValue;
if (val is IConvertible)
{
 double d = ((IConvertible)val).ToDouble(null);
}