我正在尝试运行以下转换,导致无效的强制转换异常
指定的演员表无效
settings.ActionTimer = Convert.ToInt32(TimeSpan.FromMinutes((double)ActionTimerComboBox.SelectedValue).TotalMilliseconds);
这是什么?
ActionTimerComboBox.SelectedValue
的值(在本例中为“ 13”,然后将其从对象转换为双精度,以便可以将TimeSpan.FromMinutes()应用于该值。settings.ActionTimer
更新为毫秒转换后的值,该值应为“ 780000”。我该怎么做?
答案 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");
}
答案 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);
}