当前位置: 首页 > 编程语言 > C#

根据常量的值确定常量的名称Share

时间:2023-04-10 17:31:05 C#

Determiningaconstantnameofaconstantbasedonitsvalue有没有办法根据给定的值确定常量的名称?例如,给定以下内容:publicconstuintERR_OK=0x00000000;我如何获得“ERR_OK”?我一直在四处寻找反思,但似乎找不到任何对我有帮助的东西。一般来说,你不能。可以有任意数量的具有相同值的常量。如果您知道声明常量的类,则可以查找所有公共静态字段并查看是否有值为0的字段,仅此而已。好吧,这对你来说可能还不错——是吗?如果是这样...publicstringFindConstantName(TypecontainingType,Tvalue){EqualityComparercomparer=EqualityComparer.Default;foreach(FieldInfofieldincontainingType.GetFields(BindingFlags.Static|BindingFlags.Public)){if(field.FieldType==typeof(T)&&comparer.Equals(value,(T)field.GetValue(null))){返回字段名称;//当然还有其他人...}}returnnull;//或抛出异常}您可能对枚举感兴趣,它可以通过编程方式从名称转换为值,反之亦然。我可能迟到了..但我认为以下可能是答案publicstaticclassNames{publicconststringname1="Name01";publicconststringname2="姓名02";publicstaticstringGetNames(stringcode){foreach(varfieldintypeof(Names).GetFields()){if((string)field.GetValue(null)==code)returnfield.Name.ToString();}返回””;}}以下将打印“name1”字符串result=Names.GetNames("Name01");Console.WriteLine(result)你将无法这样做,因为常量在编译时被替换为它们的字面值。换句话说,编译器接受这个:classFoo{uintsomeField=ERR_OK;}把它变成这样:classFoo{uintsomeField=0;我建议您使用枚举来表示您的常量。或字符串ReturnConstant(uintval){if(val==0x00000000)返回“ERR_OK”;否则返回空;最简单的方法是切换到使用枚举我不认为你可以用确定性的方式做到这一点。如果有多个具有相同值的常量怎么办?以上就是C#学习教程:根据值确定常量的名称。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: