Есть у меня такая конструкция.
private double x1;
public enum EnumYesNo_for_ball2
{
Да = x1=5.0,
Нет = x1=0.0
}
Естественно что компилятор ругается, вопрос как подружить именно тип данных double с enum. Enum у меня применяется в форме для выбора Да/нет И нужно именно дабловское значение.
Тип double
нельзя использовать в enum
.
Добавьте вспомогательный метод получения double
по значению enum
.
private static double GetDoubleByEnum(EnumYesNo_for_ball2 value)
{
switch (value)
{
case EnumYesNo_for_ball2.Да: return 5.0;
case EnumYesNo_for_ball2.Нет: return 0.0;
default: return 0.0;
}
}
Enum:
public enum EnumYesNo_for_ball2
{
Да,
Нет
}
Использование:
x1 = GetDoubleByEnum(EnumYesNo_for_ball2.Да); // x1 = 5.0
Есть любопытный хак: https://ideone.com/061J9k
using System;
enum Smth : long
{
Yes = 0x4014000000000000,
No = 0x0,
}
static class SmthExts
{
public static double Value(this Smth x)
{
return BitConverter.Int64BitsToDouble((long)x);
}
}
public class Test
{
public static void Main()
{
Console.WriteLine("0x{0:X}", BitConverter.DoubleToInt64Bits(5));
Console.WriteLine();
Console.WriteLine(Smth.Yes.Value());
Console.WriteLine(Smth.No.Value());
}
}
раз уж в enum невозможно засунуть дабл, то можно сделать следующий финт хвостом и заменить энам на структуру:
public struct YesNo_for_ball2
{
public double CurrVal = 0.0; // можно запоминать значение как у нама
public const double Yes = 5.0;
public const double No = 0.0;
}
и если нужно что-то куда-то присвоить то:
double d = YesNo_for_ball2.Yes;
class Program
{
static void Main(string[] args)
{
Console.WriteLine($"Вот тебе дабл {ToDouble(TestEnum.asd1)}");
Console.WriteLine($"Вот тебе дабл {ToDouble(TestEnum.asd5)}");
Console.ReadKey();
}
static Double ToDouble(TestEnum testEnum)
{
return ((Int32)testEnum)*1.0;
}
}
public enum TestEnum: Int32
{
asd1 = 1,
asd5 = 5,
}
Вот тебе дабл 1
Вот тебе дабл 5
!!! Нужно учесть базовый класс для TestEnum и приведение типа в ToDouble(TestEnum testEnum) что бы не нарваться на выход за пределы мин/макс значений integer
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты