c# - 根据值查找常量

标签 c# struct

我有一个由以下内容组成的第 3 方结构:

[StructLayout(LayoutKind.Sequential, Size=1)]
public struct BigBlueReasonCodes
{
    public const int ABC_REASONCODE_DESCRIPTION001 = 1000;
    public const int ABC_REASONCODE_DESCRIPTION002 = 1005;
    public const int ABC_REASONCODE_DESCRIPTION003 = 1010;
    public const int DEF_REASONCODE_DESCRIPTION004 = 2001;
    public const int DEF_REASONCODE_DESCRIPTION005 = 2010;
    public const int DEF_REASONCODE_DESCRIPTION006 = 2013;
    public const int GHI_REASONCODE_DESCRIPTION007 = 3050;
    public const int GHI_REASONCODE_DESCRIPTION008 = 3050;
    public const int GHI_REASONCODE_DESCRIPTION009 = 3052;
    public const string JKL_REASONCODE_DESCRIPTION010 = "XYZ";
    public const string GHI_REASONCODE_DESCRIPTION011 = "ST";


  static BigblueReasonCodes();
}

我正在尝试根据原因代码(值)查找原因描述(字段名称),以便我的类可以执行以下操作:
string failureReason = GetReasonDescription(reasoncode);

值得一提的是,有些具有 int 值,有些具有字符串值。
我只担心具有 int 值的那些。
如果可能,我也只想要以 GHI_ 开头的那些,但没什么大不了的。

最佳答案

您可以通过分析结构使用反射来解决它:

public string GetReasonDescription(int reasonCode)
{
    return
        typeof(BigBlueReasonCodes)
            .GetFields(BindingFlags.Public | BindingFlags.Static)
            .Where(field => field.FieldType == typeof(int)) // Filter int values
            .Where(field => field.Name.StartsWith("GHI"))
            .Where(field => (int) field.GetValue(null) == reasonCode)
            .Select(field => field.Name).First(); // Assuming a field must exists
}

使用示例:
[Test]
public void GetReasonDescriptionTest()
{
    string reasonDescription = GetReasonDescription(3050);
    Assert.That(reasonDescription, Is.EqualTo("GHI_REASONCODE_DESCRIPTION007"));
}

关于c# - 根据值查找常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2568695/

相关文章:

具有混合位标志和普通成员的结构

c# - 通过 Redmine .NET API 设置新问题的作者

c# - 从 OracleDataAdapter.Fill() 填充 DataTable 时为 "Specified cast is not valid"

c - 通过管道写入结构体数组

c++ - struct 和 class 之间的区别以及为双链表构建节点?

C,弃用结构成员的可移植方式

C# - 将 IEnumerable 转换为 Dictionary<object,string>

c# - Xamarin iOS WebException : App crashes after HttpWebRequest is complete

c# - 绑定(bind)对象永远不会为空

c - 根据类型区分结构