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