如何通过拼接字符串引用并获取Settings中的配置值?
问题描述
假设程序的Settings文件中存在以下配置项:
ClassLibrary.Properties.Settings.Default.SettingName1 ClassLibrary.Properties.Settings.Default.SettingName2 ClassLibrary.Properties.Settings.Default.SettingName3
希望在方法中根据传入的整数值获取对应的配置值。可以将整数与配置名称拼接成字符串,例如:
string combinedPath = "ClassLibrary.Properties.Settings.Default.SettingName" + intValue.ToString();
但该字符串无法直接赋值获取配置值:
var mySettingsValue = combinedPath; // 这只会得到字符串本身,不是配置值
请问如何通过该拼接字符串引用并获取其指向的配置对象的值?
解决方案
你可以通过反射实现需求,直接通过属性名称从Settings.Default实例中获取对应值,无需拼接完整命名空间路径,具体步骤如下:
- 拼接出配置项的属性名(仅需
SettingNameX部分):
string settingKey = "SettingName" + intValue.ToString();
- 用反射从
Settings.Default对象中获取对应配置值:
// 获取Settings类的类型 var settingsType = typeof(ClassLibrary.Properties.Settings); // 获取Default静态属性的实例 var defaultInstance = settingsType.GetProperty("Default").GetValue(null, null); // 根据属性名获取配置值 var mySettingsValue = defaultInstance.GetType().GetProperty(settingKey).GetValue(defaultInstance, null);
- 封装成复用方法:
public static object GetSettingByIndex(int index) { string settingKey = $"SettingName{index}"; var settingsType = typeof(ClassLibrary.Properties.Settings); var defaultInstance = settingsType.GetProperty("Default").GetValue(null, null); var targetProperty = defaultInstance.GetType().GetProperty(settingKey); if (targetProperty == null) { throw new ArgumentException($"配置项 {settingKey} 不存在"); } return targetProperty.GetValue(defaultInstance, null); }
补充说明
- 反射存在一定性能开销,若为高频调用场景,建议程序启动时将所有
SettingNameX配置加载到Dictionary<int, object>缓存,后续直接通过索引取值。 - 若配置值为特定类型(如字符串、整数),可在获取后强制转换,例如:
string value = (string)mySettingsValue;
内容的提问来源于stack exchange,提问作者JosephD
相关产品推荐
相关产品推荐

