3
在我的代碼使用許多小枚舉:Eazfuscator.NET休息Enum.IsDefined
enum UserRequest : byte { Burp=1, Sneeze=2, Fart=3 }
我經常需要將其轉換爲這個枚舉之前驗證整數輸入。
bool valid_input = Enum.IsDefined(typeof(UserRequest), user_byte_value);
當枚舉使用FlagsAttribute時,此方法不起作用; Enum.IsDefined不能自動組合標誌來制定指定的值。不過,我已經能夠解決不需要FlagsAttribute。
但是,TIL Eazfuscator.NET的混淆打破了Enum.IsDefined。我知道這是可能的,但我希望它不會,因爲它不在System.Reflection命名空間中(據報道,它大量使用System.Reflection)。
所以我想知道如果有人知道任何好的選擇。我具體如下:
- 允許檢查整數是否在指定的枚舉。
- 與.NET Framework 2.0和Mono Framework兼容。
- 在不顯式禁用混淆的情況下使用混淆(使用屬性或某種GUI工具)。
有關於「Eazfuscator打破我的代碼」的常見問題。通常與「他們沒有迴應」。拋棄它。 – 2012-04-28 00:21:35
@HansPassant IIRC,我用過的其他一些混淆器不會中斷Enum.IsDefined(),但我不會責怪Eazfuscator。我可能會採取一種解決方案,涉及我認爲所謂的'enum guard'。這個想法是你做這樣的事情: enum UserRequests:字節{Burp = 0,Sneeze = 1,Fart = 2,MAXVAL = 3} 您可以通過比較來檢查指定的整數是否在標誌中MAXVAL。 – 2012-04-28 00:27:54
嘗試[Crypto Obfuscator](http://www.ssware.com/cryptoobfuscator/obfuscator-net.htm)。它對於基於枚舉的場景有一些智能的自動排除規則。免責聲明:我爲Crypto Obfuscator的開發商LogicNP Software工作。 – logicnp 2012-08-09 09:20:20