如果我有一个被限制为类型'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)
......但你无法通过枚举来约束.
" 只能将类或接口指定为约束. "(c)ReSharper
int(Int32)只是一个结构.您可以约束T是结构.但你不能使用任何结构作为约束.
你可以在这里找到可能的约束的完整列表 - http://msdn.microsoft.com/en-us/library/d5x73970.aspx
UPD
对于Enum约束,请参阅此问题 - C#3.0中是否存在"特殊类"Enum的泛型类型约束的解决方法?
| 归档时间: |
|
| 查看次数: |
6162 次 |
| 最近记录: |