C#程序异常
发生异常。指定了异常。强制转换无效C#程序异常,c#,winforms,combobox,C#,Winforms,Combobox,发生异常。指定了异常。强制转换无效 int s = (int)comboBox1.SelectedItem; 这意味着组合框项目中的值不是inttry int s = int.Parse(comboBox1.SelectedItem.ToString()); 您不能仅通过强制转换将任何对象转换为int。如果您有字符串,则需要使用将字符串转换为int 如果在组合框中插入自己的对象作为项目,则可以将comboBox1转换为您的类型 ComboBox.SelectedItem.ToString()
int s = (int)comboBox1.SelectedItem;
这意味着组合框项目中的值不是
int
try
int s = int.Parse(comboBox1.SelectedItem.ToString());
您不能仅通过强制转换将任何对象转换为int
。如果您有字符串
,则需要使用将字符串
转换为int
如果在组合框中插入自己的对象作为项目,则可以将comboBox1转换为您的类型
ComboBox.SelectedItem.ToString()
仅当在ComboBox中插入了字符串对象时才返回内容,更可靠的方法是检查属性。这也将使您免于一些null
检查。检查SelectedIndex>-1或SelectedItem!=null您试图将组合框项强制转换为int
试一试
如果您想要项目的索引。如果您想要获得组合框中显示的值,可能您应该尝试:
int s = (int)comboBox.SelectedValue;
MSDN上的示例用法
但实际上,您需要在问题中提供更多细节:)
总猜测,但一个常见的做法可能是在ComboBox值属性中存储数据库id,在text属性中存储数据库项文本。如果这就是您正在做的,那么如果您确定combobox的值总是可以强制转换为int,那么您可以使用下面的语法
int i = (int)ComboBox1.SelectedValue.ToString();
或者如果你不确定它总是整数,你可以
try
{
int i = int.Parse(ComboBox1.SelectedValue.ToString());
}
catch
{
//handle the non int situation here
}
或
尝试Convert.ToInt32(combo.Items[combo.SelectedIndex].Value.ToString())
@leppie如果sheena想要获取所选项目的索引,而不是所选项目本身的值,我不会感到惊讶。所以这个建议是有意义的,即使它是一个假设(你几乎被迫这样做,因为这个问题包含的信息太少)。@Rob:你在假设,我不是。从所选项目中获取int
有什么问题?没有什么!如果OP想要从SelectedItem中得到int,他很可能知道他需要进行某种转换。在我看来,很明显他想要所选项目的索引。@leppie我当然是在做假设,但我已经解释了原因。正如@leppie所说,它确实假设组合框中的所有值都是intSelectedItem.ToString()
将产生类似于System.Net.UI.Controls.ComboBoxItem.或任何无法解析为int的的内容。这根本不起作用。@David:如果内容是字符串,它会起作用。我将编辑我的帖子,推荐comboBox1.Text。@David Hedlund:你在说什么?ASP.NET中没有组合框。@leppie:因此出现了或其他任何类型的组合框。我没有费心去看这个类到底属于哪里,因为这根本不是我的重点。@Albin:是的,使用.Text
我对你的解决方案一点问题都没有=)我们可以猜到你在想为什么会出现这个错误,以及如何消除它。。。但是,如果你付出一点额外的努力,并把它作为一个问题来表达,而不是让我们去猜测,那就太好了。你是想得到存储在组合框中的索引还是值?请指定,以便可以给出有意义的答案。发生异常。不是真正的问题抛出新异常(“不是真正的问题”)
@David Hedlund:抛出新的DavidHedlundDoesNotUnderstandException()
抛出新的ArgumentOutofOffeeException(“leppie”)
=)当OP陈述一个问题时,我会理解这个问题。在此之前,我可以像其他任何人一样进行猜测,但我不希望(返回MarksArgument;
)这一切都取决于您如何绑定ValueMember。但如果保留默认值并为空,它应该可以工作。但如果所选项目失败,也将失败。是。但是我们应该猜这种细节吗…?为什么-1?我不认为@Brissles是错的,除了一个缺陷:s=(int)comboBox1。SelectedIndex
,不需要(int)
,因为SelectedIndex
是一个int
。@Danny:1可能是因为有人反对OP试图得到的SelectedIndex
的假设。我自己对这个假设没有异议。考虑到完全没有实际问题,我想我们都可以自由地填补这里的空白。@David:没错。有些老年退休金计划没有很好地描述他们的问题,这不是因为他们懒惰或者他们不想这样做。原因可能是他们不熟悉这个问题。所以我认为一个好的答案应该指出错误,而给出一个可能的解决方案更为重要。这个答案绝对正确,但毫无用处。OP仍然不知道他应该做什么。我更喜欢那些被否决的答案,这对初学者更有帮助。@Danny:这个问题现在已经完全被正切的讨论占据了,所以我不确定OP是否能够从中提取出任何有价值的东西,但最终,接受勾号是OP发现最有用的东西的唯一标志,所以我相信这会自行解决的。话虽如此,我同意被否决的答案所作的假设并非毫无意义。当你在做一个假设时,指出这一点总是一个很好的实践,不过:“嘿,如果你想做的是A,那么你可以做,这个,如果你真的是指B,那么…”
int i = (int)ComboBox1.SelectedValue.ToString();
try
{
int i = int.Parse(ComboBox1.SelectedValue.ToString());
}
catch
{
//handle the non int situation here
}
int i;
bool result = int.TryParse(ComboBox1.SelectedValue.ToString(), out i);
if (result)
{
//you can use the variable i now
}
else
{
//The parse failed so handle a non int situation here
}