C# - 通过条件检查值的数据类型

时间:2009-07-22 15:11:39

标签: c# listbox events types arraylist

我将ArrayList()绑定到Listbox控件,并为Array中的数据分配Displaymember和Value。我的问题是我在启动时绑定但是在几次函数调用后数组被填充。我在selectedIndexChanged上有代码来检查selectedValue,但是如果ArrayList是空的,它返回一个对象,一旦它有数据,它就会返回我期望的字符串。我仍然感到困惑,为什么当列表没有数据时它运行selectedIndexChanged。认为它可能在我绑定Displaymember之后但在赋值之前运行:

lbCAT_USER.DataSource = USERS;
// Running here maybe?
lbCAT_USER.DisplayMember = "DisplayString";
// Or Here?
lbCAT_USER.ValueMember = "ID";

无论哪种方式,我当前的解决方法是将SelectedValue与字符串进行比较并尝试重新运行该函数的try / catch。

简单的解决方法可能是在if语句之前检查数据类型的方法吗?任何建议的想法都可能非常有用。感谢

5 个答案:

答案 0 :(得分:10)

您有两种方法可以检查:

string value = list.SelectedValue as string;

// The cast will return null if selectedvalue was not a string.
if( value == null ) return; 

//Logic goes here.

如果您只是想进行比较:

if( list.SelectedValue is string )
{
   // ...
}

答案 1 :(得分:1)

如果您的问题是如何通过if-condition(标题!)检查值的数据类型,那么请转到(例如:检查值是否为'string'类型):

if(value.GetType().Equals(typeof(string)))
{
   ...
}

编辑:这不是最干净的方法。检查Guard的答案,了解更复杂的检查类型的方法。使用'GetType()。等于'比'is'或'as'更精确,因为'value'必须与'string'类型完全相同。 'is'和'as'即使'value'是checked类型的子类也能工作。这与“type”类型进行比较时无关紧要,因为您无法从字符串继承。

答案 2 :(得分:0)

处理value为null的情况:

if (typeof(value) == typeof(string))
{
    ...
}

答案 3 :(得分:0)

我相信你也可以使用:

if (value is string)
{
}

检查C#中变量的类型。

答案 4 :(得分:0)

是的,他们都调用OnSelectedIndexChanged()事件

你可以通过在OnSelectedIndexChanged处理程序上放置断点并单步执行来检查这一点。

执行数据绑定时,可以取消挂钩OnSelectedIndexChanged事件

this.ListBox.SelectedIndexChanged -= OnSelectedIndexChangedHandler;

this.ListBox.DataSource = dataSource;
this.ListBox.ValueMember = "ID"
this.ListBox.DisplayMember = "Name"

this.ListBox.SelectedIndexChanged += OnSelectedIndexChangedHandler;

或者只是检查其他人在OnSelectedIndexChanged事件中建议的值。

两者都不能伤害