gpt4 book ai didi

c# - Eazfuscator.NET 破坏了 Enum.IsDefined

转载 作者:行者123 更新时间:2023-11-30 17:12:50 24 4
gpt4 key购买 nike

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

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)。

所以我想知道是否有人知道任何好的替代方案。我特别关注以下内容:

  1. 允许检查一个整数是否在指定的枚举中。
  2. 与 .NET Framework 2.0 和 Mono Framework 兼容。
  3. 在不明确禁用混淆的情况下幸存下来(使用属性或某些 GUI 工具)。

最佳答案

如果其他人遇到同样的问题并找到这篇文章,我采用的解决方案是向我的每个枚举添加一个额外的枚举成员。

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, IConvertible

关于c# - Eazfuscator.NET 破坏了 Enum.IsDefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10359194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com