怎样才能对 enum 用泛型

pthiiu 2010-10-13 04:02:25
怎样才能对 enum 用泛型??
我知道下面这样是不对的。。。


public void Operation<T>() where T : enum
{
....
}


谢谢~~
...全文
1098 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2010-10-13
  • 打赏
  • 举报
回复
public T GetEnumFromString<T>(string value) where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
{
}
}
http://stackoverflow.com/questions/79126/create-generic-method-constraining-t-to-an-enum
种草德鲁伊 2010-10-13
  • 打赏
  • 举报
回复
Enum.IsDefined(typeof(T), value)

是不是这个意思?
pthiiu 2010-10-13
  • 打赏
  • 举报
回复

public enum MyEnum { Zero, One, Two, Three };

public void MyMethod()
{
foo<MyEnum>(MyEnum.One);
}

public void foo<T>(T value)
{
Type enumType = typeof(T);

if (enumType.BaseType != typeof(Enum))
throw new ArgumentException("T must be of type System.Enum");

Console.WriteLine((T)Enum.Parse(enumType, value.ToString()));
Console.WriteLine();
}


got it. but Can I use: ?


switch ((T)value)
{
case enumType.0:
....
break;
case enumType.1:
....
break;
....
default:
break;
}


Or similar
阿非 2010-10-13
  • 打赏
  • 举报
回复
where T : struct

是可以的,但是使用不了enum的扩展方法了。
边城的刀声 2010-10-13
  • 打赏
  • 举报
回复 1

用struct先,再加个判断
public void Operation<T>() where T : struct
{
if(!typeof(T).IsEnum) throw new ArgumentException("必须是枚举类型");
}
阿非 2010-10-13
  • 打赏
  • 举报
回复
public void foo<T>(T value) where T : int

=>

public void foo<T>(T value) where T : struct
csproj 2010-10-13
  • 打赏
  • 举报
回复
应该是这样吧
public void Operation<T>() where T : struct
{
....
}

泛型约束 class 表示引用类型 struct 表示值类型

种草德鲁伊 2010-10-13
  • 打赏
  • 举报
回复


不懂,where T : struct 可行吗
pthiiu 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 flyerwing 的回复:]

public void Operation<T>() where T : enum
{
....
}
看样子好象对,偶也概念不强了.
[/Quote]


[Quote=引用 1 楼 cgabriel 的回复:]

enum 就是 int, 把参数改成 int 就是了
[/Quote]

[Quote=引用 3 楼 pthiiu 的回复:]

嗯????我试试

C# code

public enum MyEnum{Zero, One, Two, Three };

public void foo<T>(T value) where T : int
{
Console.WriteLine("It is {0}", value);
}

public void MyMethod()
{
foo<MyEnum>(M……
[/Quote]


I tried in both way. Neither works. Anyone know how to work with it? Simpler, better.
deyygywxf 2010-10-13
  • 打赏
  • 举报
回复
好象没问题吧~
兔子-顾问 2010-10-13
  • 打赏
  • 举报
回复
鸡动了。看错了。忽略5,6楼的鸡动…
兔子-顾问 2010-10-13
  • 打赏
  • 举报
回复
1楼想法,如果用在类上,就很有趣了,虽然暂时没想到什么时候用的上。
兔子-顾问 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cgabriel 的回复:]
enum 就是 int, 把参数改成 int 就是了
[/Quote]

yangkaixianglove 2010-10-13
  • 打赏
  • 举报
回复
正是很好啊
pthiiu 2010-10-13
  • 打赏
  • 举报
回复
嗯????我试试


public enum MyEnum{Zero, One, Two, Three };

public void foo<T>(T value) where T : int
{
Console.WriteLine("It is {0}", value);
}

public void MyMethod()
{
foo<MyEnum>(MyEnum.One);
}


这样会正确显示 It is One. 吗? 怎么感觉这么怪呢?
flyerwing 2010-10-13
  • 打赏
  • 举报
回复
public void Operation<T>() where T : enum
{
....
}
看样子好象对,偶也概念不强了.
CGabriel 2010-10-13
  • 打赏
  • 举报
回复
enum 就是 int, 把参数改成 int 就是了

111,129

社区成员

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

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

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