2

是否可以通过索引访问属性?

以 Person 类为例,它可以具有属性“BirthNo”和“Gender”。如果我想访问 BirthNo 的值,是否可以以任何方式写 p.[0].Value 还是必须写 person.BirthNo.Value?

Person p = new Person
//I have this:
string birthNo = p.BirthNo.Value;
//I want this: 
string birthNo = p.[0].Value;
4

2 回答 2

4

p.[0].Value不是正确的 c# 代码,所以你绝对不能这样写。

您可以尝试使用indexers,但您必须自己编写很多逻辑,例如:

public T this[int i]
{
    get
    {
        switch(i)
        {
            case 0: return BirthNo;
            default: throw new ArgumentException("i");
        }
    }
}

调用代码看起来是这样的:

p[0].Value

然而,这是可怕的事情,你甚至不应该考虑那样使用它!*

于 2013-04-09T18:09:30.333 回答
1

您可以在 Person 类中包含一个字符串 Dictionary ,并在属性更改时将字符串值写入其中。像这样的东西:

class Person
    {
        Person()
        {
            properties.Add(0, "defaultBirthNo");
        }

        Dictionary<int, string> properties = new Dictionary<int,string>();

        private int birthNo;

        public int BirthNo
        {
            get { return birthNo;}
            set { 
                birthNo = value;
                properties[0] = birthNo.ToString();
            }
        }
    }

当你设置属性

person.BirthNo = 1;

例如,您可以使用以下方法检索它:

string retreivedBrithNo  = person.properties[0];

这非常混乱,我想不出你为什么要这样做,但无论如何这是一个答案!:)

于 2013-04-09T18:37:58.127 回答