重构之错误汇集

来源:互联网 发布:中亚五斯坦知乎 编辑:程序博客网 时间:2024/05/01 10:21

                 重构的基本代码已经完成有一段日子了,但是最近一直在调试,思想通了,可是写代码是一个心细的活,所以写的时候考虑的问题多点,写的用心点,调试的时候问题就少点,少走点弯路。现在讲我的问题例举一下,与君共勉。


问题一:未将对象引用设置到对象的实例

     这就是我们的所要的一个数据为空,重构中U层引用的的B层没有实例化,也就是没有那个new。或者是B层中引用的工厂层没有实例化。这些问题写的时候注意点。所以可以是对象所在的命名空间没有引用,对象没有实例化,出现异常,实例化失败对象为null.

         

 举例1:   

 

                     


    这是在添加和删除用户的窗体中,点击选中的一行或者是几行,然后我们在代码中用循环来显示所选择的那一行的账户号,也就是数据库中的userID,然后根据我们选中的userID,再在数据库中进行删除。

    图中的那一行代码就是实现选择一行,并选择这一行的第一列,也就是选中userID.

    首先我写的是被注释掉的第一句,也就是Cell(0),在DateGridView控件中,我开始认为是从0开始。因为cells(组件)就是从0开始的啊。但是还是不对,于是我又把他改成cells(账户)。但是还是不对。忽然看了一下控件,改成了cells(1),原来图上的标志就是0。成功啦。

              

      原来我们控件中,我画的那一列默认的就是0,当我们的账户(userID)就是1啦啊。(调试了好长的时间啊。。。。。。)


举例2:

     

      看图上的错误,这是从D层返回到U层的时候,也就是当D层返回的是nothing,而不是有数据的返回值的时候,在U层会报错。

      我当时想着,假如在D层返回的是Nothing,肯定就是没有记录,也就是0.到了U层自然而然就是数据的行数为0了,假如行数为0,就执行下面的提示的信息。但是怎么会出错呢?

      后来执行单步调试,发现我太容易联想啦,返回值是nothing就是nothing,除非你在D层的返回值那里写上,返回0.因为返回值是nothing,所以我们需要在nothing上进行判断,而不是0上。所以将上面的那句话改成:if isnothing(mylist)=true then 提示信息。就这样,解决了。。。

      ps(这个问题我调试了好长的时间,那时候脑袋就是不转!!!)


问题二:索引超出范围。必须为非负值并小于集合大小。

      比如我们查到的只有3行,但是我们在代码中却要写第四行怎么样怎么样,那么,这个问题就出现啦。也就是访问了集合中不存在的值

      解决的时候就是注意一下数字,看看数字对应的对不对。比如下面的这段代码,就需要注意这中间的数字啦。

   


问题三:窗体上锁啦。

     偶尔的一次,我的窗体的大小更改不了了,原来是窗体锁啦,其实就是改该窗体的lock的属性,设置成为false就可以啦。也就是控件锁啦,窗体锁啦改属性中的lock 变为false。


问题四:System.Decimal”的对象无法转换为类型“System.Int32

     这个问题也就是我们的实体层和数据库中的数据类型不一致,所以改一致就可以啦。


问题五:将截断字符串或二进制数据进程

     数据库中设置的数据的长度太小啦,我开始设置的是10,后来就改成100啦!



问题六:变量名 '@cardno' 已声明。变量名在查询批次或存储过程内部必须唯一。

     也就是这个参数@cardno设置的不是唯一的,赋给他的值超过了一个,所以改变其他一个值的参数的就可以啦。


问题七:控件怎么有最后一行

        

     怎么前面的都没有出现这个,在这个窗体中竟然出现了。好吧。解决起来也是很容易的。这个控件是很高大上的,我们可以自己自由的添加一行记录,看看属性,里面有一个AllowusertoAddRows,直接把他该成false,就可以啦。


     什么都是一个过程,在这个过程中我们都会收获很多的,起码,我们不要害怕出错。大笑大笑大笑大笑大笑大笑

     




     

1 0
原创粉丝点击