Простой ответ на Ваш вопрос: нет, нет никакого простого пути. Существует большое обходные решения.
действительно не должно быть простым путем, из-за того, каковы генераторы: способ произвести последовательность значений , не содержа последовательность в памяти . Таким образом, нет никакого обратного обхода.
Вы могли записать функцию has_next или возможно даже хлопнуть ее на генераторе как метод с необычным декоратором, если бы Вы хотели.
Я не знаю соглашения, но как насчет
public enum EthernetLinkSpeed {
Link10BaseT, Link1000BaseT, LinkDisconnected
}
Я просто ищу в этом случае что-то более наглядное. Например, поскольку у вас есть значение перечисления «Disconnected», я бы использовал что-то вроде:
public enum EthernetLinkSpeed {
Connected10BaseT,
Connected100BaseT,
Connected1000BaseT,
Disconnected
}
Поскольку они предназначены только для времени компиляции, нет никакого вреда, если они будут такими длинными, как вы хотите, даже если сделать их длинными означает просто сделать их достаточно информативный, чтобы передать правила именования компилятора.
Не прямой ответ, но встроенное перечисление NetworkInterfaceType
включает следующие значения:
Ethernet, Ethernet3Megabit, FastEthernetT, FastEthernetFx, GigabitEthernet
На мой вкус это немного некрасиво, но я мог бы рассмотреть возможность использования префикса Ethernet
для вашего перечисления:
public enum EthernetLinkSpeed
{
[Description("10BASE-T")]
Ethernet10BaseT,
[Description("100BASE-T")]
Ethernet100BaseT,
[Description("1000BASE-T")]
Ethernet1000BaseT,
[Description("Disconnected")]
Disconnected
}
Я не уверен, существует ли соглашение, но что-то вроде этого может быть субъективно менее «уродливым»:
public enum EthernetLinkSpeed {
[Description("10BASE-T")]
TenBaseT,
[Description("100BASE-T")]
OneHundredBaseT,
[Description("1000BASE-T")]
OneThousandBaseT,
[Description("Disconnected")]
Disconnected
}
Обычно мы ставим перед ними префикс 'e'
public enum EthernetLinkSpeed
{
e10BaseT,
e100BaseT,
e1000BaseT,
Disconnected
}
Мы имеем дело с большим количеством разрешений видео, 720p и т. Д., Поэтому мы используем e720p. В вашем случае, я думаю, лучше использовать имена: Ethernet, FastEthernet и GigabitEthernet.
Как вы заметили, имена важный. Так что иногда полезно исследовать неочевидные альтернативы.
Совершенно другая альтернатива:
public enum EthernetLinkSpeed {
[Description("10BASE-T")]
MegabitSlow,
[Description("100BASE-T")]
MegabitFast,
[Description("1000BASE-T")]
Gigabit,
[Description("Disconnected")]
Disconnected
}
Никогда не помешает добавить уникальный префикс ко всем связанным перечислениям. По крайней мере, это поможет с поиском / заменой редактирования вашего исходного кода в будущем.