Mam dwa dość duże enumy (jeden ma ~60 wartości, drugi ~100). Potrzebuję przekonwertować jeden typ na drugi. Obecnie mam gigantycznego switcha. Jaka jest lepsza praktyka? Powinienem użyć Dictionary<Enum1, Enum2>
? A może dać sobie spokój? ;-)
zalezy, jezeli ten if jest w miare czytelny i nie jest porozwalany (bo zapewne ten pierwszy enum moze miec kilka wartosci tego drugiego) to bym zostawil. I jezeli jest to jedyne miejsce uzywane do tlumaczenia enuma.
Jezeli jest wiecej miejsc uzywanych to koniecznie przerobilbym to na Dictionary<enum1, enum2>
No i ostatnie jezeli
jezeli Ci sie chce to oczywiscie, ze zmien ;) Mi osobiscie by nie chcialo, jezeli to jest jedyne miejsce użycia i bedzie to jedyne miejsce użycia tego tłumaczenia. (W sensie biznesowym jest to strata czasu)
Jeśli jest to możliwe, to ja bym to zrobił tak:
enum FirstEnum
{
SomeEnum1 = 1,
SomeEnum2 = 2,
SomeEnum3 = 2
}
enum SecondEnum
{
MyEnum1 = 1,
MyEnum2 = 2,
MyEnum3 = 3
}
static SecondEnum ToSecondEnum(FirstEnum firstEnum)//albo użyć extension method
{
var firstEnumVal = (int)firstEnum;
return (SecondEnum)firstEnumVal;
}
enum FirstEnum
i enum SecondEnum
jak w przykładzie @dam1ana.
SecondEnum[] FirstToSecond = {MyEnum2, MyEnum2, MyEnum1}; // tablica konwersji. zawartość według potrzeby.
var fe = FirstEnum.SomeEnum1;
var se = FirstToSecond[(int)fe]; // MyEnum2
karolinaa napisał(a):
lepsza jest mapa albo jak w enumie możesz dać pola. ale nie wiem czy macie to w C# , bo my w javie mamy ;]
Ale mapę/słownik nadal muszę wypełnić, więc nadal mam funkcję dłuuuugo poza jednym ekranem. I mnie by maniacy czystego kodu pobili.
zalezy, jezeli ten if jest w miare czytelny i nie jest porozwalany (bo zapewne ten pierwszy enum moze miec kilka wartosci tego drugiego) to bym zostawil. I jezeli jest to jedyne miejsce uzywane do tlumaczenia enuma.
To jest akurat switch, ale nadal - jest olbrzymi. Ale to tylko jedna funkcja.
Jeśli jest to możliwe, to ja bym to zrobił tak:
enum FirstEnum
{
SomeEnum1 = 1,
SomeEnum2 = 2,
SomeEnum3 = 2
}
Niestety - cały sens jest taki, że enum opakowuje pewne wartości numeryczne, nie ma pomiędzy nimi zależności matematycznej absolutnie żadnej, konwersja na inta nie wchodzi w grę.
Ogólnie - zostawiłem w spokoju, mam 80 liniową funkcję i jestem szczęśliwy.