Сравнение двух перечислений *вводит* для эквивалентности?

Можно сделать это с кодом T-SQL с помощью таблиц INFORMATION_SCHEMA.

существуют также сторонние программы - мне нравится Вершина Сценарий SQL за точно использование, о котором Вы говорите. Я выполняю его полностью от командной строки.

6
задан Roger Lipscombe 11 September 2009 в 10:15
поделиться

2 ответа

Enum.GetValues ​​:

var xValues = Enum.GetValues(x);
var yValues = Enum.GetValues(y);

for (int i = 0; i < xValues.Length; i++)
{
    Assert.AreEqual((int)xValues.GetValue(i), (int)yValues.GetValue(i));
}
14
ответ дан 8 December 2019 в 16:06
поделиться

Я бы перевернул то, как вы проверили. Легче получить имя из значения, чем значение из имени. Перебирайте значения и одновременно проверяйте имена.

public static class EnumAssert
{
    public static void AreEquivalent(Type x, Type y)
    {
        // Enum.GetNames and Enum.GetValues return arrays sorted by value.
        var xValues = Enum.GetValues(x);
        var yValues = Enum.GetValues(y);

        Assert.AreEqual(xValues.Length, yValues.Length);
        for (int i = 0; i < xValues.Length; i++)
        {
            var xValue = xValues.GetValue( i );
            var yValue = yValues.GetValue( i );
            Assert.AreEqual(xValue, yValue);
            Assert.AreEqual( Enum.GetName( x, xValue ), Enum.GetName( y, yValue ) );
        }
    }
}
1
ответ дан 8 December 2019 в 16:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: