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

Phi*_*ght 2 c# generics

如果我有一个被限制为类型'int'的泛型方法,那么我当然应该能够将一个整数转换为泛型T类型.例如...

    public T ExampleMethod<T>(int unchanged) where T : int
    {
        return (T)unchanged;
    }
Run Code Online (Sandbox Code Playgroud)

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

更新:

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

public T GetAttributeAsEnum<T>(XmlReader reader, string name) where T : enum
{
    string s = reader.GetAttribute(name);
    int i = int.Parse(s);
    return (T)i;
}
Run Code Online (Sandbox Code Playgroud)

......并像这样使用它......

StateEnum x = GetAttributeAsEnum<StateEnum>(xmlReader, "State");
CategoryEnum y = GetAttributeAsEnum<CategoryEnum>(xmlReader, "Category");
OtherEnum z = GetAttributeAsEnum<OtherEnum>(xmlReader, "Other");
Run Code Online (Sandbox Code Playgroud)

......但你无法通过枚举来约束.

Dmi*_*kin 7

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

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

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

UPD

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