具有整数约束的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’不是有效约束。 用作约束的类型必须是接口,非密封类或类型参数。