首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eazfuscator.NET破坏Enum.IsDefined

Eazfuscator.NET破坏Enum.IsDefined
EN

Stack Overflow用户
提问于 2012-04-27 23:37:54
回答 1查看 1.1K关注 0票数 3

在我的代码中,我使用了许多小枚举:

代码语言:javascript
复制
enum UserRequest : byte { Burp=1, Sneeze=2, Fart=3 }

在将整数输入转换为这个枚举之前,我通常需要验证它。

代码语言:javascript
复制
bool valid_input = Enum.IsDefined(typeof(UserRequest), user_byte_value);

当枚举使用FlagsAttribute时,此方法不起作用;Enum.IsDefined无法自动组合标志以生成指定的值。但是,我已经能够解决不需要FlagsAttribute的问题了。

然而,直到Eazfuscator.NET的混淆破坏了Enum.IsDefined,我知道这是可能的,但我希望它不会发生,因为它不在System.Reflection名称空间中(据报道,它大量使用了System.Reflection)。

所以我想知道是否有人知道有什么好的选择。我特别想了解以下几点:

  1. 允许检查整数是否位于指定的枚举中。
  2. 兼容.NET Framework2.0和Mono。
  3. 避免混淆,而不显式禁用它(使用属性或某些GUI工具)。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-28 22:20:38

如果其他人遇到同样的问题,并发现本文,我使用的解决方案是向我的每个枚举添加一个额外的enum成员。

代码语言:javascript
复制
enum UserRequests : byte
{
    Burp = 0,
    Sneeze = 1,
    Fart = 2,
    /* Maximum Valid Value */
    MAXVAL = Fart
}

这是我记得在C(非ANSI和#defines)中迭代枚举值的做法,它唯一的缺点是很难维护。

我编写了一个泛型函数来教训负担(标题如下所示);我仍然必须显式地传递MAXVAL成员,但它比我想象的要少。当然,它可以避免混淆,而且是可移植的。

代码语言:javascript
复制
public static bool TryParseByteToEnum<T>(byte input_byte, 
    out T enum_member, T max_value) where 
        T : struct, IConvertible
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10359194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档