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