gpt4 book ai didi

c# - 如何使用反射将一个类中的常量字符串字段链接到另一个类中的只读对象字段

转载 作者:太空宇宙 更新时间:2023-11-03 14:59:19 24 4
gpt4 key购买 nike

我有一个包含字符串常量的类和一个包含表示计数器对象的只读对象的类。我已经创建了一个自定义属性,它使用相应计数器的字符串表示来标记字符串常量。有没有一种好方法可以使用属性将字符串 const 链接到计数器对象?

这里是字符串常量的例子:

public static class OperatorDiagnosticsConstants
{
[CounterType(CounterType = "ReagentProbe1")]
public const string R1_PROBE_CODE = "SACT-158";
}

这是包含只读计数器对象的类:

public class MaintenanceCounterType : CounterTypeEnum
{
public static readonly MaintenanceCounterType ReagentProbe1 = new MaintenanceCounterType(MaintenanceCounterTypeConstants.ReagentProbe1ID);
}

我可以想到两种解决方案,但想知道是否有更优雅的方法?首先是在使用这两个类的代码中,我可以使用带有 switch 语句的转换方法。打开属性字符串以返回 MaintenanceCounterType

public MaintenanceCounterType Convert(string attributeStr)
{
switch (attributeStr)
{
case "ReagentProbe1":
return MaintenanceCounterType.ReagentProbe1;
......
}
}

或者我想我可以将相同的自定义属性 CounterType 添加到 MaintenanceCounterType 并使用反射来匹配它们。我猜想通过检查自定义属性的字符串属性的相等性?

寻找更优雅的解决方案。谢谢!

最佳答案

与其尝试使用该方法,不如考虑使用 C# 枚举,它在 API 中具有在枚举常量和字符串之间进行转换的功能。

将枚举常量转换为字符串(API):

public class ConvertEnumToStringExample {
enum Colors { Red, Green, Blue, Yellow };

public static void Main() {

Console.WriteLine("The 4th value of the Colors Enum is {0}", Enum.GetName(typeof(Colors), 3));
Console.WriteLine("The 4th value of the Colors Enum is {0}", Enum.GetName(typeof(Colors), Colors.Yellow));
}
}

将字符串转换为枚举常量(API):

public class ConvertStringToEnumExample {
enum Colors { Red, Green, Blue, Yellow };

public static void Main() {

string colorString = "Yellow";
Colors colorValue = (Colors) Enum.Parse(typeof(Colors), colorString);

// colorValue is now Colors.Yellow

}
}

关于c# - 如何使用反射将一个类中的常量字符串字段链接到另一个类中的只读对象字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47042704/

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