A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 王海舟 中级黑马   /  2012-9-16 10:35  /  3100 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在写聊天室程序的时候遇到一个问题:

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

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

那么Text属性和SelectedItem属性到底有些什么区别呢?为什么程序会出错呢?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 李后量 于 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);
复制代码
现在你应该明白为什么你会出现上述问题了吧?

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

回复 使用道具 举报
回复 使用道具 举报
李后量 发表于 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 15:41
先感谢你的回答,我把这几种转换方式在代码中都试了一遍:

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

这总结的精辟!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马