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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王海舟 中级黑马   /  2012-9-16 10:35  /  2861 人查看  /  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 就是我们要被转换的数据

这总结的精辟!
回复 使用道具 举报
本帖最后由 张青江 于 2012-9-16 16:37 编辑


我运行了你的代码,没有问题
我是在页面上加了个按钮,用作提交
不知道你是什么情况下进入if判断的
这是后台代码:
  1. protected void Button1_Click(object sender, EventArgs e)
  2. {
  3. if (string.IsNullOrEmpty(ListBox1.Text))
  4. {
  5. Response.Write("请选择一个在线客户端");
  6. return;
  7. }
  8. //使用这种方法,程序运行正常。

  9. //-判断ListBox控件列表中是否有被选中的项
  10. if (string.IsNullOrEmpty(ListBox1.SelectedItem.ToString()))
  11. {
  12. Response.Write("请选择一个在线客户端");
  13. return;
  14. }
复制代码
在listbox 里面随便写几条数据,然后点按钮提交测试都通过了。

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马