1

伪代码:

using wLog.Properties;

var sName = frmControlProp[cn].SettingName;  
var pSettings = Properties.Settings.Default + sName;  

sName 值等于,例如,密码。我希望 pSettings 等于 Properties.Settings.Default.Password
我该如何实现?

4

3 回答 3

2

您无法完全按照自己的意愿编写代码,也没有语法糖可以让您接近所需的语法。

这通常通过使用字典来实现。不确定是什么类型,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);
于 2013-08-16T16:47:19.567 回答
1

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属性来获取所有值并检查您感兴趣的值是否存在。

于 2013-08-16T16:50:59.707 回答
1

使用反射

类型类

using wLog.Properties;

var sName = frmControlProp[cn].SettingName;

var type = Properties.Settings.Default.GetType();
var pSettings = type.GetField(sName).GetValue(Properties.Settings.Default);
于 2013-08-16T16:57:38.907 回答