Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2345300
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: WINDOWS

2009-01-07 23:15:22

直观的, 简单的枚举, 没想到有这么多让人吃惊的细节:

enum T
{
    A,
    B=A,
};
public class MyClass
{
    public static void RunSnippet()
    {
        WL( T.A.ToString() );
        WL( T.B.ToString() );
        T tt = T.B;
        WL( tt.ToString() );
        
        foreach(FieldInfo fi in typeof(T).GetFields(BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.Public ) )
        {
            WL("Field declare name: {0}, instance name: {1}", fi.Name, fi.GetValue(null).ToString() );
        }
    }

}


先猜猜答案, 结果是很让人吃惊的,
T.B.ToString() 结果竟然是A, 而在.NET中, 通过反射却是可以得到确实有两个枚举值的定义, 只不过这两个枚举值相同.

问题: 既然A与B取值相同, 以上面的定义, 有没有可能A.ToString()和B.ToString()的结果都是 B?
我想没可能.

无用的细节吗? 它已经在我们的产品中引起了难以查找的Bug!

文件:Default.rar
大小:0KB
下载:下载


阅读(1011) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~