泛型如何限定T为枚举呢

wodecclg 2011-12-31 02:00:28
我想要定义一个范形类型 MyClass<T>,需要限定T必须是一个枚举类型,该怎么做...
...全文
1021 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2012-01-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 caozhy 的回复:]
class MyClass<T> where T : Enum
[/Quote]
这个没办法编译的,是语言层面的限制,C#不允许使用Enum类型,虽然Enum是枚举的基类,类似的System.Delegate 也不能直接使用。

但是应该在IL层面可以做到。
threenewbee 2012-01-02
  • 打赏
  • 举报
回复
class MyClass<T> where T : Enum
ycproc 2012-01-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qiao910527 的回复:]

这样子可否合你的意思呢?
我试过了可以,只是不知你说的是否如此
C# code

public class Class1<T>
{
public string Str { get; set; }

}
public enum Abc
{
a,b,c
}


C# code

private void butt……
[/Quote]
这个最能 简单理解
youzelin 2012-01-02
  • 打赏
  • 举报
回复

typeof(T).IsEnum
jeromeRomeo 2012-01-01
  • 打赏
  • 举报
回复
额。。。还没看到这部分呢。。。
zh6335901 2011-12-31
  • 打赏
  • 举报
回复
还不支持限定为枚举,只能限定为值类型。。where T : struct
qldsrx 2011-12-31
  • 打赏
  • 举报
回复
其实枚举是值类型的,任何值类型的数据类型都可以视为枚举,因此你限制为struct即可。
thy442030800 2011-12-31
  • 打赏
  • 举报
回复
熊猫说的不错,当前FrameWork版本,直接通过类型参数的约束是否无法做到的

不过可以通过程序控制做限定。
zdzcool 2011-12-31
  • 打赏
  • 举报
回复
+++1
[Quote=引用 1 楼 qiao910527 的回复:]

这样子可否合你的意思呢?
我试过了可以,只是不知你说的是否如此
C# code

public class Class1<T>
{
public string Str { get; set; }

}
public enum Abc
{
a,b,c
}


C# code

private void butt……
[/Quote]
烟波钓 2011-12-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zerokiseki 的回复:]
当前FrameWork版本,直接通过类型参数的约束是否无法做到的

不过可以通过程序控制做限定,比如提供一种思路:


C# code

class MyClass<T> where T : struct
{
public MyClass()
{
if (typeof(Enum) != typeof(T).BaseType)
……
[/Quote]+++
香儿爱土豆 2011-12-31
  • 打赏
  • 举报
回复
当前FrameWork版本,直接通过类型参数的约束是否无法做到的

不过可以通过程序控制做限定,比如提供一种思路:


class MyClass<T> where T : struct
{
public MyClass()
{
if (typeof(Enum) != typeof(T).BaseType)
{
throw new Exception("类型参数不合法,当前泛型类的类型参数必须为枚举类型");
}
}
}
csdn_aspnet 2011-12-31
  • 打赏
  • 举报
回复
MyClass<enum>
qiao910527 2011-12-31
  • 打赏
  • 举报
回复
这样子可否合你的意思呢?
我试过了可以,只是不知你说的是否如此

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);
}

110,549

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧