Yok

苦海无涯,回头是岸啊

2004年11月29日

UIPAB的'"Controller"到底是Controller还是Model?

文档上说UIPAB的Controller是对应MVC的Controller,State对应Model,View对应View
但是,我觉得这和传统的MVC的定义有出入,Model应该是处理业务逻辑才对,而不是储存状态,Controller是响应用户输入,而不是处理业务逻辑.
System.Web.UI.Page应该是Controller和View的混合体吧?

posted @ 2004-11-29 23:03 Yok 阅读(908) 评论(3) 编辑

原来SortedList是根据comparer的比较结果判断插入的键是否重复的...

刚才在做一个使用NHibernate的主从表维护的页面.hibernate的一对多集合一般用Set,一种元素不可重复的集合.由于.Net没有Set,作者先用HashTable或SortedList凑合用着,而集合的类型必须要声明为IDictionary.因为某些原因我必须要对从表数据按Id排序,于是在配置文件加上一个自己写的Comparer.结果程序莫名其妙出错,明明加了两个不同的记录,确会出现"加入了重复的键"的错误.后来经过调试和实验才知道,NHibernate会把可排序的Set实例化成SortedList,而SortedList是通过他的comparer的比较结果判断两个对象是否相同,而不是reference equal.
这是反编译出来的Add方法的代码:
    public virtual void Add(object key, object value)
    
{
      
if (key == null)
      
{
        
throw new ArgumentNullException("key", Environment.GetResourceString("ArgumentNull_Key"));
      }

      
int i = Array.BinarySearch(keys, 0, _size, key, comparer);
      
if (i >= 0)
      
{
        
throw new ArgumentException(Environment.GetResourceString("Argument_AddingDuplicate__"new object[]{GetKey(i), key}));
      }

      Insert(
~i, key, value);
    }
当时我对数据的操作还是在内存中进行,没插入数据库,所以Id还都是0,它就认为有重复键了.
我只好修改comparer的代码了.如果Id都是0,就让比较结果为-1.
...
...
(n天后)
呀,晕了,原来SortedList在初始化时会用个x.CompareTo(x)检查Comparer是否工作正常,所以还是会出错 >_<
解决问题的方法,只能让Set集合 = new HashTable(),然后在Add元素进去.实在没办法让SortedList存在排序结果相同的元素

posted @ 2004-11-29 16:28 Yok 阅读(787) 评论(0) 编辑

为什么不能取消断点?

有些断点我想取消,但是点击左边或者按F9之后,断点的地方由高亮的褐色变成了褐色的边框,下一次运行到这个地方还是会停下来,即使重启了VS.NET也是如此,为什么!为什么





...
...
(十分钟后)
规律总算找到了,凡是不在启动项目的代码都会这样,启动前设了断点在运行时无法取消,只能停了程序再取消.得一个个找还真麻烦.原因不明.请高人指点

...

...

(半天后)
"清除所有断点"就可以了,在调试菜单或者ctrl+shift+F9

posted @ 2004-11-29 16:06 Yok 阅读(1002) 评论(9) 编辑

<2004年11月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

公告

不玩了不玩了不玩了不玩了不玩了不玩了不玩了不玩了
昵称:Yok
园龄:7年4个月
粉丝:4
关注:0

搜索

 
 

常用链接

我的标签

随笔分类

随笔档案

相册

Friend Links

积分与排名

最新评论

阅读排行榜

评论排行榜

推荐排行榜