Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menukar Penerangan Enum Kembali kepada Nilai Enumnya?

Bagaimana untuk Menukar Penerangan Enum Kembali kepada Nilai Enumnya?

DDD
DDDasal
2025-01-21 21:37:10614semak imbas

How to Convert an Enum Description Back to its Enum Value?

Tukar daripada perihalan enum kembali kepada nilai enum

Dalam setiap kes, nilai penghitungan perlu diambil berdasarkan sifat perihalan yang berkaitan dengan penghitungan. Mari kita terokai pendekatan umum untuk mencapai matlamat ini.

Pertimbangkan contoh berikut di mana kami mempunyai kaedah sambungan untuk mendapatkan sifat perihalan enum:

<code>public static string GetDescription(this Enum value)
{
    // 获取Description属性的实现
}</code>

Menggunakan kaedah ini, kita boleh mendapatkan penerangan dengan memanggil kod berikut:

<code>string myAnimal = Animal.GiantPanda.GetDescription(); // "Giant Panda"</code>

Sekarang, mari kita selami proses terbalik untuk menukar atribut perihalan kembali kepada nilai penghitungan yang sepadan. Untuk tujuan ini, kami memperkenalkan kaedah pembantu:

<code>public static T GetValueFromDescription<T>(string description) where T : Enum
{
    // 根据描述检索枚举值的实现
}</code>

Dalam kaedah ini, kami mengulangi medan jenis penghitungan dan menggunakan refleksi untuk mendapatkan PeneranganAtribut mereka:

<code>foreach (var field in typeof(T).GetFields())
{
    // 检查DescriptionAttribute并与提供的描述匹配的逻辑
}</code>

Kami boleh menggunakan nama medan sebagai mekanisme sandaran jika tiada DescriptionAttribute yang sepadan ditemui. Akhirnya, kami menghantar hasil ke jenis enum yang diingini:

<code>return (T)field.GetValue(null);</code>

Untuk menggunakan kaedah ini, hanya nyatakan jenis penghitungan dan sifat perihalan:

<code>var panda = EnumEx.GetValueFromDescription<Animal>("Giant Panda");</code>

Atas ialah kandungan terperinci Bagaimana untuk Menukar Penerangan Enum Kembali kepada Nilai Enumnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn