variable valor tipo que parametros parametro opcionales enumeraciones enumeracion enum declarar dato como asignar c# enums optional-parameters

c# - valor - Usando una enumeración como parámetro opcional



que es un enum en java (3)

Asegúrese de que su enum tenga un valor predeterminado (igual a cero), que significa "ninguno" o "no válido". Este sería un valor apropiado para el valor predeterminado de su parámetro opcional.

Esto también es recomendado por Microsoft Code Analysis, CA1008: Enums debería tener valor cero .

Por ejemplo:

enum SpeakerType { None = 0, Woofer, Midrange Tweeter }

De esta manera, la palabra clave default proporciona un valor que es sano, pero que no se refiere involuntariamente a algo que no desea.

Como ejemplo, el BCL utiliza este mismo concepto. El número de bits de parada a usar para un SerialPort se define mediante la enumeración de StopBits :

public enum StopBits { None, One, Two, OnePointFive, }

Sin embargo, el valor None no es válido. De hecho,

La clase SerialPort lanza una excepción ArgumentOutOfRangeException cuando establece la propiedad StopBits en None .

Tengo varios métodos en una aplicación en la que estoy trabajando cargada con parámetros opcionales, algunos de los cuales son enumerados. Actualmente, para hacer eso estoy escribiendo métodos con un tipo de firma similar:

public void SomeMethod(string myFirstParam = "", string mySecondParam = "", MyEnum myThirdParam = (MyEnum )(-1)){ if (myThirdParam != (MyEnum ) (-1)) { //do something with it } }

Entonces, mi primera pregunta es, ¿hay algún escollo en este enfoque que no he comprendido, pero con el tiempo será dolorosamente consciente, y en segundo lugar, hay una solución más adecuada, o al menos elegante?

Debo decir que controlamos la entrada a este método, se usa internamente, por lo que no me preocupa que alguien agregue un valor de -1 para pegar las obras.


Qué pasa :

enum MyEnum { MISSING = -1, FirstValue, SecondValue, ... } public void SomeMethod(string myFirstParam = "", string mySecondParam = "", MyEnum myThirdParam = MISSING) { if (myThirdParam != MISSING) { //do something with it } }


Sugeriría usar enumeración nullable en esta situación, como esta:

public void SomeMethod(string myFirstParam = "", string mySecondParam = "", MyEnum? myThirdParam = null) { if (myThirdParam.HasValue) { var enumValue = myThirdParam.Value; //do something with it } }

y puedes usarlo así:

SomeMethod(myThirdParam: MyEnum.Something);