У меня есть общее перечисление, скажем, G, которое имеет некоторые помеченные значения (Один = 0 / Два = 1 / Три = 2 / Четыре = 4 / Пять = 8 и т. Д.).
Затем у меня есть другое перечисление (скажем, B), которое «расширяет» G с помощью такого типа паттерна: One = G.One / Two = G.Two / Three = G.Three / Four = G.Four (и это все, нет пять в этом).
У меня наконец есть последнее перечисление (скажем, C), которое также «расширяет» G с тем же типом шаблона, но с другими значениями: Three = G.Three / Four = G.Four / Five = G.Five (no One и два в этом).
Я бы хотел найти универсальную функцию для преобразования B в C или C в B.
Например, если у меня есть «A valsAsA = A.One | A.Three | A.Four», мне нужна функция, подобная этой: «B valsAsB = convert (valsAsA);» это дало бы мне "B.Three | A.Four".
Это должно быть действительно общим, потому что у меня есть не только перечисления A и B, но также C, D, E ... с различными возможными значениями перечисления, но всегда значения из обобщенного перечисления.
Возможно ли, не проверяя все возможности и не адаптируя функцию каждый раз, когда я добавляю новый enum?
Пример:
public enum General : int
{
One = 0,
Two = 1,
Three = 2,
Four = 4,
Five = 8
}
public enum A : int
{
One = General.One,
Two = General.Two,
Three = General.Three,
Four = General.Four,
}
public enum B : int
{
Three = General.Three,
Four = General.Four,
Five = General.Five
}
public enum C : int
{
One = General.One,
Three = General.Three,
Five = General.Five
}
public class Test
{
public void testConvert()
{
A valAsA = A.One | A.Three | A.Four;
B valAsB = convertFct(valAsA); // Should give me "B.Three | B.Four"
C valAsC = convertFct(valAsA); // Should give me "C.One | C.Three"
}
}
Я проверял это:
A valAsA = A.One | A.Three | A.Four;
C valAsC = (C)valAsA;
C valAsCReal = C.One | C.Three; // expected result
без удачи .. valAsC = 6, а valAsCReal = 2 ...
Большое спасибо