在我的代码中,我使用了许多小枚举:
enum UserRequest : byte { Burp=1, Sneeze=2, Fart=3 }在将整数输入转换为这个枚举之前,我通常需要验证它。
bool valid_input = Enum.IsDefined(typeof(UserRequest), user_byte_value);当枚举使用FlagsAttribute时,此方法不起作用;Enum.IsDefined无法自动组合标志以生成指定的值。但是,我已经能够解决不需要FlagsAttribute的问题了。
然而,直到Eazfuscator.NET的混淆破坏了Enum.IsDefined,我知道这是可能的,但我希望它不会发生,因为它不在System.Reflection名称空间中(据报道,它大量使用了System.Reflection)。
所以我想知道是否有人知道有什么好的选择。我特别想了解以下几点:
发布于 2012-04-28 22:20:38
如果其他人遇到同样的问题,并发现本文,我使用的解决方案是向我的每个枚举添加一个额外的enum成员。
enum UserRequests : byte
{
Burp = 0,
Sneeze = 1,
Fart = 2,
/* Maximum Valid Value */
MAXVAL = Fart
}这是我记得在C(非ANSI和#defines)中迭代枚举值的做法,它唯一的缺点是很难维护。
我编写了一个泛型函数来教训负担(标题如下所示);我仍然必须显式地传递MAXVAL成员,但它比我想象的要少。当然,它可以避免混淆,而且是可移植的。
public static bool TryParseByteToEnum<T>(byte input_byte,
out T enum_member, T max_value) where
T : struct, IConvertiblehttps://stackoverflow.com/questions/10359194
复制相似问题