黑马程序员技术交流社区

标题: Text属性和SelectedItem属性的区别? [打印本页]

作者: 王海舟    时间: 2012-9-16 10:35
标题: Text属性和SelectedItem属性的区别?
在写聊天室程序的时候遇到一个问题:

-判断ListBox控件列表中是否有被选中的项
if (string.IsNullOrEmpty(lbClientOnLine.Text))
{
       MessageBox.Show("请选择一个在线客户端");
       return;
}
使用这种方法,程序运行正常。

-判断ListBox控件列表中是否有被选中的项
if (string.IsNullOrEmpty(lbClientOnLine.SelectedItem.ToString()))
{
       MessageBox.Show("请选择一个在线客户端");
       return;
}
使用这种方法,程序运行错误。

那么Text属性和SelectedItem属性到底有些什么区别呢?为什么程序会出错呢?
作者: 李后量    时间: 2012-9-16 12:23
本帖最后由 李后量 于 2012-9-16 12:31 编辑

先运行下这段代码
  1.             object obj = "";
  2.             string a = "";
  3.             a = obj.ToString();
  4.             MessageBox.Show(a);

  5.             object objNull = null;
  6.             string b = "";
  7.             a = objNull.ToString();
  8.             MessageBox.Show(b);
复制代码
你会发现当object类型的变量不为null的时候,用ToString方法转成string类型不会有任何问题;但如果object类型的变量为null的时候,ToString方法转成string类型的时候就会报错,抛出一个名为NullReferenceException的异常。而ListBox.SelectItem的类型为object,默认情况下为null,所以直接用ToString方法 转成string类型会报错。
而如果是用这种方法转成string类型就不会出错,即使object类型为Null
  1. object objNull = null;
  2. string c = objNull as string;
  3. string b = "";
  4. b=c;
  5. MessageBox.Show(b);
复制代码
现在你应该明白为什么你会出现上述问题了吧?
作者: 李后量    时间: 2012-9-16 12:40
详细请参考帖子http://bbs.itheima.com/thread-25769-1-1.html
作者: 王海舟    时间: 2012-9-16 15:41
李后量 发表于 2012-9-16 12:23
先运行下这段代码你会发现当object类型的变量不为null的时候,用ToString方法转成string类型不会有任何问题 ...

先感谢你的回答,我把这几种转换方式在代码中都试了一遍:

假定data 就是我们要被转换的数据
1、data.ToString()
2、Convert.ToString(data)
3、(string)data
4、string str = data as string

如果data=null,结果是:
1、data.ToString()   报异常
2、Convert.ToString(data)  返回null
3、(string)data   返回空
4、string str = data as string  返回空






作者: 李后量    时间: 2012-9-16 16:18
王海舟 发表于 2012-9-16 15:41
先感谢你的回答,我把这几种转换方式在代码中都试了一遍:

假定data 就是我们要被转换的数据

这总结的精辟!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2