伪代码:
using wLog.Properties;
var sName = frmControlProp[cn].SettingName;
var pSettings = Properties.Settings.Default + sName;
sName 值等于,例如,密码。我希望 pSettings 等于 Properties.Settings.Default.Password
我该如何实现?
伪代码:
using wLog.Properties;
var sName = frmControlProp[cn].SettingName;
var pSettings = Properties.Settings.Default + sName;
sName 值等于,例如,密码。我希望 pSettings 等于 Properties.Settings.Default.Password
我该如何实现?
您无法完全按照自己的意愿编写代码,也没有语法糖可以让您接近所需的语法。
这通常通过使用字典来实现。不确定是什么类型,Deafult
但假设它是某种IDictionary
代码看起来像:
var pSettings = Properties.Settings.Default[settingName];
另一种选择是使用反射并按名称获取属性 -使用 C# 中的反射从字符串中获取属性值,来自该问题的示例:
public static object GetPropValue(object src, string propName)
{
return src.GetType().GetProperty(propName).GetValue(src, null);
}
var pSettings = (string)GetPropValue(Properties.Settings.Default, settingName);
Properties.Settings.Default
将返回一个实例,Properties.Settings
该实例将是ApplicationSettingsBase
. 它有一个带键的索引器string
,因此您可以使用:
string name = frmControlProp[cn].SettingName;
object setting = Properties.Settings.Default[name];
请注意,如果您知道(并想使用)您感兴趣的设置类型,则需要进行投射。例如:
string setting = (string) Properties.Settings.Default[name];
另请注意,如果设置不存在,SettingsPropertyNotFoundException
则会抛出 a。您可以使用该PropertyValues
属性来获取所有值并检查您感兴趣的值是否存在。
使用反射
看类型类
using wLog.Properties;
var sName = frmControlProp[cn].SettingName;
var type = Properties.Settings.Default.GetType();
var pSettings = type.GetField(sName).GetValue(Properties.Settings.Default);