En C# Tengo un código API "seguro" relacionado con la elevación de UAC. Se trata de conseguir el tamaño de una enumeración (como sigue)C# sizeof (enum) alternative? (al error falso del resharper de la solución)?
int myEnumSize = sizeof (MyEnum);
El código en sí mismo es válido, compila, funciona correctamente, etc. Pero ReSharper falsamente lo marca como un error ("No se puede utilizar constructo inseguro en contexto seguro") dentro de la solución. (Starting with version 2.0 of C#, applying sizeof to built-in types no longer requires that unsafe mode be used.) Me encanta Resharper, y me encanta el análisis de soluciones, pero con este código en la solución, tengo un gran punto rojo en la esquina que me hace pensar que algo está roto. Si le digo a resharper que ignore este error, vuelve en minutos.
Me gustaría plantear el problema con JetBrains, pero miré en su rastreador y ya tienen un registro que ha sido ignorado desde marzo. Mirando más allá, tienen al menos otras dos instancias de este registro que se remonta a varios años, ambas fueron descartadas con un estado de "no repro". No quiero suscribirme a su rastreador solo para votar este error. Todavía podría terminar aguantando la respiración durante años. El camino más rápido es solo resolver el problema.
¿Cuál es la mejor alternativa que sigue siendo correcta y tiene la menor posibilidad de causar problemas al mantenedor más adelante?
pude difícil que el código a:
int myEnumSize = 4;
es que hay una solución más correcta? - que no usa sizeof (enum)?
BTW:
Marshal.SizeOf()
es completamente "seguro", pero devuelve el tamaño incorrecto.
PS. El código en las preguntas está muy influenciado por el código de demostración UACSelfElvation de Microsoft. Si quieres más detalles Pero no creo que sean relevantes.
Trabajo confirmado. –
Perfecto. Esto es exactamente lo que estaba buscando. Funciona, y aunque no es bonito, con un comentario que muestra la forma más concisa e indicando por qué no se usó aquí, será genial. Gracias. Esto es exactamente lo que estaba esperando cuando le pregunté a Stackoverflow. – DanO