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

use*_*236 4 c# variables indexing class member

假设我有这样一个类:

class Person
{
    public string name;
    public string address;
    public string city;
    public string state;
    public string zip;
}
Run Code Online (Sandbox Code Playgroud)

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

Select Name, Address, City, State, Zip
FROM Persons_Tbl
Run Code Online (Sandbox Code Playgroud)

目前,我将数据存储在类中,如下所示:

// 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();
}
Run Code Online (Sandbox Code Playgroud)

这只是一个例子.实际上,我有更多的列要检索.我不想为每个列数据倾斜写一行,而是希望通过索引使代码更小并循环.这可以使用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();   
    }
}
Run Code Online (Sandbox Code Playgroud)

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

非常感谢,提前.

Tig*_*ran 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;
           ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你在这里使用的是被称为Indexers in C#.

以后可以使用它:

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

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