是否可以使用C#中的索引引用类成员变量?

时间:2013-01-30 20:19:03

标签: c# class variables indexing member

假设我有一个这样的课程:

class Person
{
    public string name;
    public string address;
    public string city;
    public string state;
    public string zip;
}

我正在对数据库执行数据挖掘:

Select Name, Address, City, State, Zip
FROM Persons_Tbl

目前,我将数据存储在类中:

// Person class and SqlDataReader have been instantiated.

while (reader.Read())
{
    p.name = reader[0].ToString();
    p.address = reader[1].ToString();
    p.city = reader[2].ToString();
    p.state = reader[3].ToString();
    p.zip = reader[4].ToString();
}

这只是一个例子。实际上,我有更多的列要检索。而不是为每个列数据dip写一行,我想通过索引使代码更小并循环。这可以使用reader对象,因为我可以通过索引检索列。

但是,是否可以以相同的方式索引类成员变量?这是重写的while循环,以更好地解释我在问什么:

// pseudocode!
while (reader.Read())
{
    for (int index = 0; index < 5; index++)
    {
        index of p member variables (i.e. name, address) = reader[index].ToString();   
    }
}

是否可以以这种方式操作类成员变量?或者,我必须创建一个数组类型的成员变量吗?我更喜欢写出Person类的每个成员变量,因为它看起来更干净,更容易阅读。

非常感谢,提前。

1 个答案:

答案 0 :(得分:6)

是的,你可以这样做。

示例:

class Person
{
    public string name;
    public string address;
    public string city;
    public string state;
    public string zip;

    public string this[int index] { //SPECIAL PROPERTY INDEXERS
        get {
           if(index == 0)
              return name;
           else if(index == 1)
              return address;
           ...
        }
        set {
           if(index == 0)
              name = value;
           else if(index == 1)
              address = value;
           ...
        }
    }
}

您在此处使用的内容在C#中称为Indexers

之后可以使用它:

Person person = new Person();
person[0] = "James Bond"; //SET NAME
person[1] = "London";     //SET ADDRESS
.....

即使考虑到这一点,也许是解决这个问题的原始方法,我首先考虑重新设计代码的可能方法,以避免这种类型的解决方案。