根据值确定常量的名称

Fra*_*ser 5 .net c# reflection const

有没有办法从给定值确定常量的名称?

例如,给出以下内容:

public const uint ERR_OK = 0x00000000;

怎么能获得"ERR_OK"?

我一直在寻找反思,但似乎无法找到任何有助于我的东西.

Jon*_*eet 15

一般来说,你不能.可以有任意数量的具有相同值的常量.如果您知道声明常量的类,您可以查找所有公共静态字段并查看是否有值为0,但这就是全部.那么,这对你来说可能还不错 - 是吗?如果是这样...

public string FindConstantName<T>(Type containingType, T value)
{
    EqualityComparer<T> comparer = EqualityComparer<T>.Default;

    foreach (FieldInfo field in containingType.GetFields
             (BindingFlags.Static | BindingFlags.Public))
    {
        if (field.FieldType == typeof(T) &&
            comparer.Equals(value, (T) field.GetValue(null)))
        {
            return field.Name; // There could be others, of course...
        }
    }
    return null; // Or throw an exception
}
Run Code Online (Sandbox Code Playgroud)