孙展波:实现.NET无限潜力

Realize .NET Potential (中文版)
随笔 - 430, 评论 - 12203, 引用 - 54

导航

关于

贴子以"现状"提供且没有任何担保也没有授予任何权利。
计数器(2005/12/8起).点击阅读我的Blog In English

标签

每月存档

最新留言

广告

设计指导: struct结构总包含其缺省构造函数

在.NET框架3.0或者3.5版本下,下面的代码会在GetHashCode时抛出NullReferenceException:

System.ComponentModel.SortDescription description = new System.ComponentModel.SortDescription();
int hash = description.GetHashCode();

设计指导:不要抛出NullReferenceException中,我们提到此准则至少包含两个方面的意思:

  1. 代码中决不要显性地 throw new NullReferenceException
  2. 代码中要有充分的错误检查,避免由CLR抛出NullReferenceException.

上面代码的问题是由于第一点,还是第二点呢?我们只有看到源代码才能确定。

在源代码中,我们看到对于这个public struct SortDescription,程序员定义了一个构造函数:

        public SortDescription(string propertyName, ListSortDirection direction)

        {

            if (direction != ListSortDirection.Ascending && direction != ListSortDirection.Descending)

                throw new InvalidEnumArgumentException("direction", (int)direction, typeof(ListSortDirection));

 

            _propertyName = propertyName;

            _direction = direction;

            _sealed = false;

        }

而GetHashCode的实现如下:

        public override int GetHashCode()

        {

            return unchecked(PropertyName.GetHashCode() + Direction.GetHashCode());

        }

其中PropertyName简单返回_propertyName. 您一定注意到,构造函数没有对propertyName是否为null做检查。 这是会导致GetHashCode时的NullReferenceException.

但是,我们最初的代码实际上使用的是struct结构的缺省构造函数。和class不同,即使程序员显式地提供了一个非缺省构造函数,struct仍然保有缺省构造函数。在设计库函数时,我们需要留意这些区别。

------ ------
值此Blog 400篇之际,MSR Asis特制对联一幅, 以谢读者:

Chun Lian 400

posted on 2008-02-18 09:10:00 by zhanbos  评论(2) 阅读(5345)

如果VS2008 WPF Designer的Intellisense在安装了最新的Windows SDK/MSDN之后不工作了

最近这些日子,很多程序员反映,在安装了最新的Windows SDK for Windows Server 2008 and .NET Framework 3.5之后,VS2008 WPF Designer的Intellisense就不再工作了。他们不得不重新安装或者修复VS2008。

这往往是因为一个Registry Key的值被SDK的安装程序错误地删除了。

请检查HKEY_CLASSES_ROOT\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\InProcServer32下,(Default)的值是否为空。如果是,你需要将其更新为TextMgrP.dll的完整路径。TextMgrP是Visual Studio Text Manager Proxy。

在我的系统上,该文件在C:\Program Files\Common Files\Microsoft Shared\MSENV\TextMgrP.dll。更新之后,Intellisense就又可以工作了。

如果您不想自己修改注册表值,也可以通过VS安装程序的修复功能,恢复原先正确的状态。

(而安装程序的问题,也会在近期解决。)

posted on 2008-02-14 18:50:00 by zhanbos  评论(3) 阅读(5897)

戊子年首发拜年:恭贺新禧,大吉大利

这个冬天有点冷。无情的雨雪把我们打醒,让回家的路从此被否定。

但是,冬天到了,春天还会远么?

在这万家灯火爆竹声声辞旧岁的时刻,我向您拜年了!对在过去的一年里面帮助和关心着我的人们,我要深深地说声谢谢。繁忙的生活常使我们疏于联系,请多保重。有一天我们一定要再见,那一天也许就在戊子年.

祝我们的2008风调雨顺。“鼠”于您的成功,跑也跑不掉。

posted on 2008-02-07 00:02:00 by zhanbos  评论(2) 阅读(4783)

Powered by: Joycode.MVC引擎 0.5.2.0