2009-01-05 11 views

Respuesta

7

Una razón que puedo pensar es que la verificación de rango es más fácil. Dado que la mayoría de las enumeraciones comienzan en 0, solo tendrías que verificar el límite superior.

21

si los valores de enumeración son mayores que 2,147,483,647 y no negativos.

+0

¿Por qué votar abajo? Pensé que era una razón válida para hacer esto? –

+0

¿Qué pasa con los valores que solo no deberían ser negativos? –

+1

Lo siento, teniendo dificultades para entender lo que quieres decir, ¿puedes volver a formular la pregunta? –

6

Es conveniente y absolutamente necesario en algunos casos cuando se trabaja con COM Interop/P/Invoke de .NET. Por ejemplo, ciertamente encontrará algunos en pinvoke.net definidos de esta manera. En algunos casos, se correlaciona más con la definición subyacente de la API, pero no es necesario, pero en algunos casos la API subyacente podría usar algunos de esos bits altos para los indicadores y se requerirá que sea UINT. Fuera de Interop, también podría usar algunos bits muy altos como indicadores en C#/VB.NET simple y eso también podría requerir uint.

1

El ejemplo que estoy hablando es en el código aquí: http://www.codeplex.com/FacebookNET

Tome un vistazo a las FacebookResponseStatus.cs clase

pude correo electrónico del autor, pero pensé que no molesta y simplemente ver lo que las personas piensan en la comunidad general basado en otras experiencias.

No voy a utilizar este marco en CodePlex, pero lo estaba revisando para ver cómo otros implementaban Facebook en .NET. Solo pensé que era interesante y quería saber por qué el: uint para los Enum allí.

1

parece que lo hacen puramente por este único error, lo que significa que probablemente haya más errores no implementados en esa clase.

/// <summary> 
    /// There was an HTTP error in issuing the request. 
    /// </summary> 
    HttpError = 0xFFFF0000 
1

Sé de otra razón, 'porque un colega lo hizo aquí.

Para evitar el problema explicado here (elemento 2), al generar una lista de enumeraciones, le da un valor único basado en la cadena (No recuerdo exactamente cómo ahora, no puede ser el hashcode ' porque eso no es único).

El único problema es que los números salen un poco grandes, por lo que hizo la enumeración correcta.

2

Estoy convirtiendo algún código de mensajería escrito originalmente en C en C#.

Algunos campos en el código C tienen un conjunto limitado de valores posibles definidos como un grupo asociado de #defines. En otras palabras, una enumeración.

Al convertir algunas de estas enumeraciones, algunos valores son demasiado grandes para un entero, p. Ej.

#define NINGUNO 0x00000000

#define VAL1 0x00000001

...

#define VALX 0x80000000

Aquí, VALX no será aceptable para una enumeración por defecto en C#, por lo que la enumeración se debe convertir como uint, que también es el tipo de la variable de almacenamiento en la estructura del registro.

Cuestiones relacionadas