我想要定义一个范形类型 MyClass<T>,需要限定T必须是一个枚举类型,该怎么做...

解决方案 »

  1.   

    这样子可否合你的意思呢?
    我试过了可以,只是不知你说的是否如此 public class Class1<T>
        {
            public string Str { get; set; }    }
        public enum Abc 
        {
            a,b,c
        }
     private void button1_Click(object sender, EventArgs e)
            {
                Class1<Abc> l = new Class1<Abc>();
                l.Str = Abc.a.ToString();
                MessageBox.Show(l.Str);
            }
      

  2.   

    当前FrameWork版本,直接通过类型参数的约束是否无法做到的不过可以通过程序控制做限定,比如提供一种思路:
     class MyClass<T> where T : struct
     {
         public MyClass()
         {
             if (typeof(Enum) != typeof(T).BaseType)
             {
                 throw new Exception("类型参数不合法,当前泛型类的类型参数必须为枚举类型");
             }
         }
     }
      

  3.   

    熊猫说的不错,当前FrameWork版本,直接通过类型参数的约束是否无法做到的不过可以通过程序控制做限定。
      

  4.   

    其实枚举是值类型的,任何值类型的数据类型都可以视为枚举,因此你限制为struct即可。
      

  5.   

    还不支持限定为枚举,只能限定为值类型。。where T : struct
      

  6.   

    class MyClass<T> where T : Enum
      

  7.   

    这个没办法编译的,是语言层面的限制,C#不允许使用Enum类型,虽然Enum是枚举的基类,类似的System.Delegate 也不能直接使用。但是应该在IL层面可以做到。