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