如何调用这种定义属性的方式

时间:2016-02-19 18:05:44

标签: c#

public class TestClass
{
    private Dictionary<string, int> _testDictionary = new Dictionary<string,int>();

    private string _key;

    public int this[string key]
    {
        get { return _testDictionary[key];}
        set 
        {
            if (_testDictionary.ContainsKey(key))
                _testDictionary[key] = value;
            else
                _testDictionary.Add(key, value);
        }
    }

}

public class Program
{
        static void Main(string[] args)
        {
            TestClass test = new TestClass();
            test["T1"] = 1;
            test["T2"] = 2;

            Console.WriteLine(test["T1"]);
            Console.WriteLine(test["T2"]);
        }

}

那么如何调用这种定义属性的方式,我想更多地了解它。也可以在其他地方使用相同的定义,例如Method etc.。

2 个答案:

答案 0 :(得分:1)

您的实施是正确的,您可以添加所需的IndexerName,但您不必这样做。如果找不到密钥,最好从getter添加一个指南,然后返回一些默认值。

查看此enter link description here

public class TestClass
{
    private Dictionary<string, int> _testDictionary = new Dictionary<string, int>();

    // you do not need a private property to store the key
    // private string _key;

    [IndexerName("MyKeyItem")]
    public int this[string key]
    {
        get
        {
            if (_testDictionary.ContainsKey(key))
            {
                return _testDictionary[key];
            }

            return int.MinValue;
        }

        set
        {
            if (_testDictionary.ContainsKey(key))
                _testDictionary[key] = value;
            else
                _testDictionary.Add(key, value);
        }
    }
}

答案 1 :(得分:1)

它被称为indexed property