gpt4 book ai didi

c# - 如何通过 C# 类中的值获取变量名称

转载 作者:行者123 更新时间:2023-11-30 13:36:18 25 4
gpt4 key购买 nike

目前我有一个类如下:

public static class JurisdictionList
{
public const string NSW = "New South Wales";
public const string NT = "Northern Territory";
public const string QLD = "Queensland";
public const string SA = "South Australia";
public const string TAS = "Tasmania";
public const string VIC = "Victoria";
public const string WA = "Western Australia";
}

我想编写一个方法 string GetJurisdictionCode(string Jurisdiction) 来返回上述每个常量的名称及其值。例如 GetJurisdictionCode(JurisdictionList.QLD) 将返回 QLD。

目前我只知道使用 Switch Case 来做到这一点,但它看起来很长。有谁知道另一种解决方法?提前致谢。

最佳答案

好吧,你可以使用反射:

public static string GetJurisdictionCode(string jurisdiction)
{
return typeof(JurisdictionList)
.GetTypeInfo()
.DeclaredFields
.Where(f => (string) f.GetValue(null) == jurisdiction)
.FirstOrDefault()
?.Name;
}

但我个人建议构建一个 Dictionary<string, string>从代码到名称,然后使用:

return codes.Where(kvp => kvp.Value == jurisdiction)
.FirstOrDefault()
?.Name;

... 或建立第二个字典以朝另一个方向发展。如果你也想要命名常量,你总是可以通过反射建立两个字典,例如

public static class JurisdictionList
{
public const string NSW = "New South Wales";
public const string NT = "Northern Territory";
public const string QLD = "Queensland";
public const string SA = "South Australia";
public const string TAS = "Tasmania";
public const string VIC = "Victoria";
public const string WA = "Western Australia";

private static readonly Dictionary<string, string> CodeToName =
typeof(JurisdictionList)
.GetTypeInfo()
.DeclaredFields
.Where(f => f.FieldType == typeof(string))
.ToDictionary(f => f.Name, f => f.GetValue(null));

private static readonly Dictionary NameToCode =
CodeToName.ToDictionary(kvp => kvp.Value, kvp => kvp.Key);

// Methods using the dictionaries here
}

您还应该考虑使用枚举,然后从枚举到名称的映射。

关于c# - 如何通过 C# 类中的值获取变量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36194595/

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