none
C#强转问题! RRS feed

  • 问题

  •        public partial class goodsSelectForm : Form
        {
            DataGridView _dv;
            int _count = 0;
            public goodsSelectForm(flitInForm flitFrom)
            {
                InitializeComponent();
                _dv = flitFrom.dataGridView1;
            }
      ............中间部分省略
      if (CheckValue(str0) == true)
                        {
                            _count = (int)_dv.Tag;
                            _dv.Rows[_count].Cells[0].Value = str0;
                            _dv.Rows[_count].Cells[1].Value = str1;
                            _dv.Rows[_count].Cells[2].Value = str2;

                      ............
                       }




             /// <summary>
            /// 根据货号判断用户是否重复选择
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public bool CheckValue(string str)
            {
                bool value = true;
                for (int i = 0; i < (int)_dv.Tag; i++)
                {
                    if (_dv.Rows[i].Cells[0].Value.ToString().Trim().Equals(str.Trim()))
                    {
                        value = false;
                    }
                }
                return value;
            }



    执行到CheckValue方法的时候强转_dv.tag就报“未将对象引用设置到对象的实例”.求解决

    2010年3月16日 3:23

答案

  • 是空值,怎么解决??

    你好!
         你需要给他赋值,或是像XXY 版主的给出的实例那样,先进行判断!
    周雪峰
    • 已标记为答案 johnnyford 2010年3月16日 5:12
    2010年3月16日 3:50
    版主

全部回复

  • 你好!
         你检查一下_dv.tag是否为null.
         希望对你有帮助!
    周雪峰
    2010年3月16日 3:28
    版主
  • 是空值,怎么解决??
    2010年3月16日 3:31
  • int i = 0;
    
    if (_dv.Tag != null && int.TryParse(_dv.Tag.ToString(), out i))
    {
        _count = i;
        _dv.Rows[_count].Cells[0].Value = str0;
        _dv.Rows[_count].Cells[1].Value = str1;
        _dv.Rows[_count].Cells[2].Value = str2;
    }
    


    知识改变命运,奋斗成就人生!
    2010年3月16日 3:44
    版主
  • 是空值,怎么解决??

    你好!
         你需要给他赋值,或是像XXY 版主的给出的实例那样,先进行判断!
    周雪峰
    • 已标记为答案 johnnyford 2010年3月16日 5:12
    2010年3月16日 3:50
    版主
  • 这里的_dv.Tag 应该是直接放的int类型,反正object类型大小通吃。

    一般这种情况转换类型用as比较好,(int)这种方法得到的数据可能是修改过的,而并非先前放在里面的东西(如float->int, int32->int16 数据会被切掉),而且as不会抛出错误,如果转换不成功则是返回null。

    但如果是int这种不允许为null的值类型, int i = object as int ,如果object是null或者不是int的话会是什么结果?
    霸王
    2010年3月16日 5:23