我正在构建一个应用程序,我正在使用一个.dll,它需要一个“Level”参数设置为金牌,银牌或铜牌。 Level是.dll中的公共枚举级别。
要选择金牌,银牌或铜牌,我想从dataGridView读取它,以便每次我想要更改它时都不会编辑源码但是我一直得到unhandles异常指定的强制转换是无效的。< / p>
这是我的代码。
var testLevel = dataGridView1.Rows[0].Cells[2].Value == null ? Level.All : (Level)(dataGridView1.Rows[0].Cells[2]).Value; // exception occurs on this line
var searchParameters = new PlayerSearchParameters
{
Level = testLevel,
};
那么,我怎样才能正确地从DVG中读取水平而没有问题呢?
感谢。
编辑:我用comboBox测试了它并且效果很好,但我真的很喜欢它通过DGV工作。
答案 0 :(得分:3)
您需要使用Enum.Parse将字符串解析为您需要的枚举。
Level levelValue = (Level) Enum.Parse(typeof(Level), (dataGridView1.Rows[0].Cells[2]).Value);
还使用检查String.IsNullOrEmpty而不是dataGridView1.Rows [0] .Cells [2] .Value == null
作为示例,您可以使用:
Level levelValue;
var value = dataGridView1.Rows[0].Cells[2]).Value;
if (Enum.IsDefined(typeof(Level), value))
levelValue = (Level) Enum.Parse(typeof(Level), value)
else
levelValue = Level.All