假设我有一个这样的课程:
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类的每个成员变量,因为它看起来更干净,更容易阅读。
非常感谢,提前。
答案 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
.....
即使考虑到这一点,也许是解决这个问题的原始方法,我首先考虑重新设计代码的可能方法,以避免这种类型的解决方案。