如果我有一個約束爲類型'int'的泛型方法,那麼當然我應該能夠將一個整型轉換爲泛型T型。例如...C#泛型約束的泛型方法拒絕從整型轉換爲泛型
public T ExampleMethod<T>(int unchanged) where T : int
{
return (T)unchanged;
}
...編譯器抱怨無法將類型「詮釋」到「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' ? – gilly3 2012-08-02 04:06:06
我的實際情況比較複雜。我想要一個幫助器方法,從文件中讀取一個字符串,該字符串實際上是一個數字。然後將該數字轉換爲正確的目標枚舉類型。所以... – 2012-08-02 04:09:31
這不會編譯。錯誤:'int'不是有效的約束。用作約束的類型必須是接口,非密封類或類型參數。 – 2012-08-02 04:09:49