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 に答える