是否有可能在其get和set中获取属性名称的字符串?

时间:2017-04-23 11:48:28

标签: c# .net properties

我想从数据库中存储和检索我的配置。我写了两个方法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);
                }
            }

2 个答案:

答案 0 :(得分:3)

如果您有权访问getConfigsetConfig方法,请修改这些方法,如下所示。这是最干净的解决方案。

    // 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);
}

或者你可以在GetConfigSetConfig方法中使用相同的属性,当然,只是在你调用它们时不提供参数。