【发布时间】:2015-06-26 18:24:07
【问题描述】:
一段代码值一千字……
public enum enTest { a, b, c }
public void PrintEnum<T>()
{
foreach (var E in Enum.GetValues(typeof(T)))
Debug.WriteLine(E.ToString());
}
PrintEnum<enTest>();
PrintEnum<enTest?>(); // This will cause failure in Enum.GetValues()
上面是从一个更大的问题简化来说明失败的。
有谁知道当有人向我传递一个 Nullable Enum 时,我该如何迭代(或获取其中的所有值)?
提前致谢。
【问题讨论】:
-
“一段代码值一千字...” - 但显示错误也会有很大帮助...以及在您的示例中使用常规名称。
-
您有一个“可为空的 int”或“可为空的枚举”的误解。你不是真的,你有的是一个可以持有一个int,或者一个enum的类型,并且还有null的概念,但是这个类型既不是int也不是enum,它是一个可以为null的值,持有一个int或一个枚举。编译器中有编译器魔法来处理这个问题,并将可空类型值从表达式中的可空值中提升/提升。所以基本上,没有人给你一个可以为空的枚举,他们给你一个
Nullable<T>,它不是一个枚举,但 T 是一个枚举。因此,您需要获得 T。 -
正如@germi 所提到的,使用 nullable.GetUnderlyingType 会给你返回所需的类型,并且由于它返回 null 如果不是可空的,你可以简单地合并以保证正常使用的安全:@987654324 @
-
一个附带问题是,如果该方法传递了一个包含枚举的
Nullable<T>,该方法是否也应该将“null”打印为合法值?