gpt4 book ai didi

c# - 按名称获取常量的值

转载 作者:行者123 更新时间:2023-12-04 01:33:21 25 4
gpt4 key购买 nike

我有一个常量类。我有一些字符串,它可以与其中一个常量的名称相同或不同。

所以用常量类 ConstClass有一些 public const喜欢 const1, const2, const3...

public static class ConstClass
{
public const string Const1 = "Const1";
public const string Const2 = "Const2";
public const string Const3 = "Const3";
}

检查类是否包含 const按名称,我接下来尝试过:
var field = (typeof (ConstClass)).GetField(customStr);
if (field != null){
return field.GetValue(obj) // obj doesn't exists for me
}

不知道这样做是否真的正确,但现在我不知道如何获得值(value),原因 .GetValue方法需要类型为 ConstClass 的 obj (ConstClass 是静态的)

最佳答案

要使用反射获取字段值或调用静态类型的成员,请传递 null作为实例引用。

这是一个简短的 LINQPad程序演示:

void Main()
{
typeof(Test).GetField("Value").GetValue(null).Dump();
// Instance reference is null ----->----^^^^
}

public class Test
{
public const int Value = 42;
}

输出:
42

请注意,所示代码不会区分普通字段和常量字段。

为此,您必须检查字段信息是否还包含标志 Literal :

这是一个仅检索常量的简短 LINQPad 程序:
void Main()
{
var constants =
from fieldInfo in typeof(Test).GetFields()
where (fieldInfo.Attributes & FieldAttributes.Literal) != 0
select fieldInfo.Name;
constants.Dump();
}

public class Test
{
public const int Value = 42;
public static readonly int Field = 42;
}

输出:
Value

关于c# - 按名称获取常量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33477163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com