如何为字典编写getter和setter?

时间:2012-07-20 16:41:37

标签: c# dictionary getter-setter

如何为复杂数据类型(如字典)定义getter和setter?

public Dictionary<string, string> Users
{
    get
    {
        return m_Users;
    }

    set
    {
        m_Users = value;
    }
}

这会返回整个字典吗?你能编写setter来查看是否存在特定的键值对,然后如果不存在,则添加它。否则更新当前的键值对?对于get,你可以返回一个特定的键值对而不是整个字典吗?

6 个答案:

答案 0 :(得分:27)

使用索引器属性(MSDN):

public class YourClass
{
    private readonly IDictionary<string, string> _yourDictionary = new Dictionary<string, string>();

    public string this[string key]
    {
        // returns value if exists
        get { return _yourDictionary[key]; }

        // updates if exists, adds if doesn't exist
        set { _yourDictionary[key] = value; }
    }
}

然后使用:

var test = new YourClass();
test["Item1"] = "Value1";

答案 1 :(得分:18)

不可能以仅涉及属性的方式进行。理论上 可以写一个setter,但是对于getter,你需要指定一个你想要检索的键。这是不可能的,因为属性不接受参数。实现你想要的自然方式是使用方法:

private Dictionary<string, string> users = new Dictionary<string, string>();

public void Set(string key, string value)
{
    if (users.ContainsKey(key))
    {
        users[key] = value;
    }
    else
    {
        users.Add(key, value);
    }
}

public string Get(string key)
{
    string result = null;

    if (users.ContainsKey(key))
    {
        result = users[key];
    }

    return result;
}

或者,正如其他人已经说过的那样,你可以使用索引器,但我总是发现它们有点麻烦。但我想这只是个人偏好的问题。

只是为了完整起见,这就是一个二传手看起来像的样子,尽管拥有这样一个属性非常不寻常和反直觉:

public KeyValuePair<string, string> Users
{
    set
    {
        Set(value.Key, value.Value);
    }
}

在内部,它使用我之前代码段中的Set方法。

答案 2 :(得分:1)

您将无法使用属性执行此操作。您需要使用方法,或者为您的类添加索引器。 get方法无法接受参数(密钥)。

另一种选择,如果您希望某人能够轻松地向字典添加/删除密钥但阻止他们设置一个全新的密钥,那么将使该属性成为只读属性,该属性返回在构造函数中创建的字典。它会比添加get / set方法更不灵活,但在通常的简单情况下,它可以做得很好。

答案 3 :(得分:0)

看起来你想要一个“命名索引器”。这是(我的)one使用C#实现这一目标的方法。

我的方法公开了一个返回一个对象(带有一个默认索引器)的属性,该对象将在给定lambdas的情况下执行索引到相应的字段。

您可能有或没有想要使用此方法,但我会留给您。 :)

答案 4 :(得分:0)

可以使用setter进行,但是非常不推荐,并且使用getter是完全不可能的,因为它不需要参数来确定要获取的内容。

对于setter,你必须传递Dictionary<string, string>一对,但它与你期望的getter / setter通常做的一样,并完全停止你设置整个Dictionary。

更好的方法是使用一对方法,如果你愿意,可以命名为Get和Set。

答案 5 :(得分:0)

Dictionary<string, string> param = new Dictionary<string, string>();

public void SetYourParameter(string parametrName, string paramValue)
{
    param[parametrName] = paramValue;            
}

public string GetYourParameter(string parametrName)
{
    // ContainKey ---> It returns value if the key was found
    if( param.ContainsKey(parametrName))
        return param[parametrName];
    else
        return null;
}