我想从数据库中存储和检索我的配置。我写了两个方法setConfig(“configName”, value)
和getConfig(“configName”)
,我在我的属性中使用它们:
public long MyConfig1
{
get
{
return getConfig("MyConfig1");
}
set
{
setConfig("MyConfig1", value);
}
}
但我必须为所有属性编写名称的字符串。 是否可以在集合中获取名称或对当前属性的任何引用并进入C#? 像这样:
public long MyConfig1
{
get
{
return getConfig(getName(this));
}
set
{
setConfig(getName(this), value);
}
}
答案 0 :(得分:3)
如果您有权访问getConfig
和setConfig
方法,请修改这些方法,如下所示。这是最干净的解决方案。
// using System.Runtime.CompilerServices;
public long MyConfig1
{
get
{
return getConfig();
}
}
private long getConfig([CallerMemberName] string propertyName = null)
{
}
但是,如果您无权修改这些方法,请在每个setter和getter中使用nameof
。
public long MyConfig1
{
get { return getConfig(nameof(MyConfig1)); }
}
答案 1 :(得分:1)
您可以编写一种方法来使用caller-information attributes:
// Put this anywhere
public static string GetCallerName([CallerMemberName] name = null)
=> name;
重要的是,当你调用它时,不提供一个参数:让编译器改为:
public long MyConfig1
{
get => GetConfig(Helpers.GetCallerName());
set => SetConfig(Helpers.GetCallerName(), value);
}
或者你可以在GetConfig
和SetConfig
方法中使用相同的属性,当然,只是在你调用它们时不提供参数。