【发布时间】:2012-08-02 13:00:14
【问题描述】:
如果我有一个被限制为“int”类型的泛型方法,那么我当然应该能够将整数转换为泛型 T 类型。比如……
public T ExampleMethod<T>(int unchanged) where T : int
{
return (T)unchanged;
}
...编译器抱怨 无法将类型 '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;
}
...并像这样使用它...
StateEnum x = GetAttributeAsEnum<StateEnum>(xmlReader, "State");
CategoryEnum y = GetAttributeAsEnum<CategoryEnum>(xmlReader, "Category");
OtherEnum z = GetAttributeAsEnum<OtherEnum>(xmlReader, "Other");
...但你不能通过枚举来限制。
【问题讨论】:
-
为什么不直接指定参数类型为
T? -
我的真实情况比较复杂。我想要一个从文件中读取字符串的辅助方法,该字符串实际上是一个数字。然后将数字转换为正确的目标枚举类型。所以...
-
这不会编译。错误:“int”不是有效的约束。用作约束的类型必须是接口、非密封类或类型参数。
-
如果
T总是 int 那么为什么要使用泛型呢? -
public T Method
(XmlReader reader) where T : enum { string s = reader.GetAttribute("whatever"); int i = int.Parse(s);返回 (T)i; }