Как использовать Numbers в качестве значений C # enum - PullRequest
0 голосов
/ 26 ноября 2018

Это действительно так:

public enum Size
{
    Eight,
    EightAndOneHalf
};

Но как можно использовать числа в перечислении C #, как показано ниже?Это вообще возможно?Или это предпочтительный способ представления этой структуры?

public enum Size
{
    8,
    8.5
};

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

По своей сути Enums немного больше констант времени компиляции, которые сгруппированы и, таким образом, получают некоторую безопасность типов.Он имеет преимущества как пользовательского типа, так как он представляет собой только числа для обработки и использования констант в коде.

Тип по умолчанию для перечислений является одним из целочисленных, а значения по умолчанию начинаются с 0, считая до нуля.Хотя тип и значения могут быть перезаписаны, они не могут быть свободно изменены.Это должно быть целым числом.

Поскольку перечисления эффективно отображаются в целые числа и даже неявно преобразуются (или, скорее, остаются не преобразованными), вы можете сделать что-то подобное с комбинацией перечисление / массив.

Может быть, Dictionary<string, double> будет более подходящим для вашего случая?

Также есть обходной путь: просто сохраните 85 и 80 в качестве значений Enum.Разделите на 10 во время вывода.Такие трюки часто используются для обхода точности с плавающей запятой.Но это может сработать и здесь.

Лично я чувствую, что это относится к области "Интернационализации".«8.5» или «8,5» - это просто то, как вы отображаете значение для этого ShoeSize.А для Enums я всегда рекомендую иметь массив значений для вывода.

0 голосов
/ 26 ноября 2018

Вы можете использовать структуры:

public struct Size
{
        public const double Eight = 8;
        public const double EightPointFive = 8.5;
        public const double Nine = 9;
        // Add Remaining units / values
}

И затем можно использовать как:

double size = Size.Eight;

Или можете сделать так:

enum Size {
    Eight, EightPointFive, Nine
}

, а затемиспользуйте такую ​​функцию:

public float GetSize(Size size)
{
    switch (size)
    {
        case Size.Eight :
            return 8;
        case Size.EightPointFive :
            return 8.5;
        // rest of the sizes.
        default: return -1;
    }

    //unhandled
    return -1;
}
0 голосов
/ 26 ноября 2018

Если то, что вы ищете, называется константой, вы можете создать что-то вроде этого:

public static class Size
{
    public const double Eight = 8.0;
    public const double EightAndOneHalf = 8.5;
}

Тогда вы будете использовать это как:

var mySize = Size.EightAndOneHalf;

Вы не можете перечислитьоднако, ваше "поддельное" перечисление, так что вам придется добавить что-то вроде этого, если вы хотите сделать это:

public static class Size
{
    public const double Eight = 8.0;
    public const double EightAndOneHalf = 8.5;

    public static IEnumerable<double> All = new double[] { Eight, EightAndOneHalf };
}

Тогда вы можете сделать что-то вроде:

foreach(var size in Size.All)
{
    // code here
}

Эта основная идея используется в самой структуре.Например: https://github.com/aspnet/Identity/blob/master/src/Identity/IdentityConstants.cs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...