You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过拼接字符串引用并获取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实例中获取对应值,无需拼接完整命名空间路径,具体步骤如下:

  1. 拼接出配置项的属性名(仅需SettingNameX部分):
string settingKey = "SettingName" + intValue.ToString();
  1. 用反射从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);
  1. 封装成复用方法:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:22:02