gpt4 book ai didi

c# - 按名称动态获取常量的嵌套值

转载 作者:行者123 更新时间:2023-11-30 14:22:19 25 4
gpt4 key购买 nike

我有一个类存储如下常量值

public class FirstClass
{
public const string A = "AValue";
public const string B = "BValue";
public const string C = "CValue";
}

var name = "A";
Console.WriteLine(typeof(FirstClass).GetField(name).GetValue(null)); //AValue

工作得很好,这里的问题是,一旦我更改结构以包含嵌套类,我就这样做了

public class SecondClass
{
public class SecondClassOne
{
public const string A = "AValue 1";
public const string B = "BValue 1";
public const string C = "CValue 1";
}

public class SecondClassTwo
{
public const string A = "AValue 2";
public const string B = "BValue 2";
public const string C = "CValue 2";
}
}

var className = "SecondClassTwo";
var name = "A";
foreach (Type type in typeof(SecondClass).GetNestedTypes()){
if(type.Name.Equals(className)){
Console.WriteLine(type.GetField(name).GetValue(null)); //AValue 2
}
}

它仍然工作正常,但不是使用 for 循环遍历所有嵌套类,有没有更好的方法来做到这一点?因为列表可能会变得越来越长,所以将所有这些 list 1 接 1 地循环似乎并不是很好。

最佳答案

当然,只需使用 Type.GetNestedType() :

var nestedType = typeof(SecondClass).GetNestedType(className);
Console.WriteLine(nestedType.GetField(name).GetValue(null));

但是,如果您经常使用它,我会强烈考虑改为构建一个字典 - 特别是如果您的所有常量都是字符串。你可能会得到一个 IReadOnlyDictionary<string, IReadOnlyDictionary<string, string>> :

public IReadOnlyDictionary<string, IDictionary<string, string>> GetConstants() =>
typeof(SecondClass).GetNestedTypes()
.ToDictionary(
type => type.Name,
(IReadOnlyDictionary<string, string>)
type.GetFields().ToDictionary(f => f.Name, (string) f => f.GetValue(null)));

(目前还没有构建 ReadOnlyDictionary ,但您当然可以这样做。)

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

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