具有整数约束的C#generics方法拒绝从整数转换为generics类型

如果我有一个被约束为类型’int’的generics方法,那么我当然应该能够将一个整数转换为genericsT类型。 例如…

public T ExampleMethod(int unchanged) where T : int { return (T)unchanged; } 

…编译器抱怨无法将类型’int’转换为’T’,但我有一个约束,表明目标是整数。 那肯定应该有用吗?

更新:

实际情况是我想要一个返回枚举值的辅助方法。 所以我理想的助手方法会更像这样….

 public T GetAttributeAsEnum(XmlReader reader, string name) where T : enum { string s = reader.GetAttribute(name); int i = int.Parse(s); return (T)i; } 

……并像这样使用它……

 StateEnum x = GetAttributeAsEnum(xmlReader, "State"); CategoryEnum y = GetAttributeAsEnum(xmlReader, "Category"); OtherEnum z = GetAttributeAsEnum(xmlReader, "Other"); 

…但你不能用枚举来约束。

只能将类或接口指定为约束。 ”(c)ReSharper

int(Int32)只是一个结构。 您可以约束T是结构 。 但你不能使用任何结构作为约束。

你可以在这里找到可能的约束的完整列表 – http://msdn.microsoft.com/en-us/library/d5x73970.aspx

UPD

对于Enum约束,请参阅此问题 – C#3.0中是否存在“特殊类”Enum的generics类型约束的解决方法?

int (以及所有其他数字类型和枚举)不能用作通用约束。

看到

通用C#代码和Plus运算符

了解更多详情和选项。

有关C#的创建者Anders Hejlsberg的讨论,请参阅generics和类型约束

http://www.artima.com/intv/generics.html

可以像这样放置struct的类型约束:

 public class Generic where T : struct { } Generic gen = new Generic(); 

你确定它的编译?

在这里,它给出以下错误:

错误CS0701:’int’不是有效约束。 用作约束的类型必须是接口,非密封类或类型参数。