Linq to Sql中使用自定义枚举类型的奇怪问题
2008-09-08 14:53 JimLiu 阅读(1563) 评论(0) 收藏 举报我声明了一个自定义枚举类型MyNamespace.Model.Result
Waiting = 0,
Accepted = 1
}
数据库中有一列是int叫Result
在dbml设计器中我自然而然地把Result这个属性的类型设置为MyNamespace.Model.Result
生成了如下代码
public MyNamespace.Model.Result Result
{
get
{
return this._Result;
}
set
{
if ((this._Result != value))
{
this.OnResultChanging(value);this.SendPropertyChanging();
this._Result = value;
this.SendPropertyChanged("Result");
this.OnResultChanged();
}
}
}
很好,正合我意。
编译——错了……说类型转换不受支持!
我晕了……我在NHibernate就这样用啊,一点问题都没的。
没辙之下我玩起无聊来,把Result属性的类型设置为Result,结果竟然编译通过了!
这真是太诡异了,MyNamespace.Model.Result这个限定名怎么也不会比Result这个限定名要弱啊,为什么编译不能通过呢?
尝试之下我发现更神奇的问题,就是用Model.Result这个限定名是可以编译通过的。
映射的类Submit是处于MyNamespace.Model命名空间下的,也就是说它的完整限定名是MyNamespace.Model.Submit。这样来说在它的任何一个成员函数或者属性访问器的作用域下,MyNamespace.Model.Result, Model.Result, Result这三个限定名都是可以正确访问到我的自定义枚举类型的,不会有问题啊。这就如同我们在System.Web.UI.Page的派生类中访问System.Web.UI.Control,我们即可以简单地用Control,也可以用System.Web.UI.Control这个完整的名字,而且后者更强,因为可能命名存在二义性——命名空间存在的意义和设计的初衷不就是为了避免命名冲突吗?可是为什么在这里强的反而不行,得弱的才行呢?
这个问题真是弄得我晕头转向啊,看来我C#基础有问题吧?
浙公网安备 33010602011771号