В C # у меня есть некоторый "безопасный" код API, связанный с повышением UAC. Это включает получение размера перечисления (следующим образом)
int myEnumSize = sizeof (MyEnum);
Сам код действителен, компилируется, работает правильно и т. Д. Но Resharper ложно помечает его как ошибку («Невозможно использовать небезопасную конструкцию в безопасном контексте») в решении. ( Начиная с версии 2.0 C #, применение sizeof к встроенным типам больше не требует использования небезопасного режима. ) Мне нравится Resharper, и мне нравится анализ решения, но с этим кодом в решении I в углу есть большая красная точка, которая заставляет меня всегда думать, что что-то сломано. Если я скажу resharper игнорировать эту ошибку, она вернется через несколько минут.
Я бы поднял проблему с JetBrains, но я посмотрел на их трекер, и у них уже есть одна запись, которая игнорируется с марта. Если посмотреть дальше, у них есть по крайней мере два других случая, когда они регистрировались несколько лет назад, оба были уволены со статусом «без репро». Я не хочу подписываться на их трекер, чтобы проголосовать за эту ошибку. Я все еще мог задерживать дыхание годами. Самый быстрый путь вперед - это просто обойти проблему.
Какова лучшая альтернатива, которая все еще верна и имеет наименьший шанс вызвать у сопровождающего какие-либо проблемы позже?
Я мог бы жестко закодировать это так:
int myEnumSize = 4;
Есть ли более правильное решение? - который не использует sizeof (enum)?
Btw:
Marshal.SizeOf()
полностью "безопасен", но возвращает неправильный размер.
PS. На рассматриваемый код сильно влияет демонстрационный код UACSelfElvation от Microsoft. Если вы хотите больше деталей. Но я не думаю, что они актуальны.