4

假设我有这样的课程:

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();
}

这只是一个例子。实际上,我有更多的列要检索。我不想为每一列数据下降写一行,而是希望通过索引使代码更小并循环。这可以使用 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 类的每个成员变量,因为它看起来更简洁且更易于阅读。

非常感谢,提前。

4

1 回答 1

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#

之后可以像这样使用它:

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

即使考虑到这可能是解决此问题的原始方法,我也会首先考虑重新构建代码以避免此类解决方案的可能方法。

于 2013-01-30T20:22:36.033 回答