是否可以使用C#中的索引引用类成员变量?
假设我有一门课是这样的:是否可以使用C#中的索引引用类成员变量?,c#,class,variables,indexing,member,C#,Class,Variables,Indexing,Member,假设我有一门课是这样的: class Person { public string name; public string address; public string city; public string state; public string zip; } // Person class and SqlDataReader have been instantiated. while (reader.Read()) { p.name =
class Person
{
public string name;
public string address;
public string city;
public string state;
public string zip;
}
// 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();
}
我正在数据库上执行数据倾斜:
Select Name, Address, City, State, Zip
FROM Persons_Tbl
目前,我将数据存储在类中,如下所示:
class Person
{
public string name;
public string address;
public string city;
public string state;
public string zip;
}
// 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();
}
}
//伪代码!
while(reader.Read())
{
对于(int-index=0;index<5;index++)
{
p成员变量的索引(即名称、地址)=读卡器[index].ToString();
}
}
可以用这种方式操纵类成员变量吗?或者,我必须创建一个数组类型的成员变量吗?我更愿意写出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;
...
}
}
}
您在这里使用的是在C.
中调用的
之后,您可以像这样使用它:
Person person = new Person();
person[0] = "James Bond"; //SET NAME
person[1] = "London"; //SET ADDRESS
.....
即使考虑到这可能是解决此问题的原始方法,我也会首先考虑重新设计代码以避免此类解决方案的可能方法。那么您将在哪里指定哪个索引映射到哪个值?这就是你的伪代码没有显示的…好吧,我想问的是,我如何才能实现你的建议?SqlData Reader类天生就可以通过索引或列名引用列。引用成员变量时,必须键入变量。我想知道是否有可能通过索引来引用类成员变量,而不是直接写出变量。这有意义吗?我没有任何建议。我是说你的“p成员变量索引”部分现在没有意义。怎么说0表示姓名,1表示地址?您需要能够在某个地方指定…谢谢。好的,这就回答了我的问题:不,没有通过索引引用成员变量的固有方法。同样,reader对象内置了这个功能——我可以指定名称或索引。对于Person类,我必须创建一个映射。或者重新设计并考虑使用数组。变量没有索引。读卡器是不同的-您已在查询中按特定顺序指定了名称。字段将根据其在源代码中的位置进行索引的想法(如果您是这么想的话)非常脆弱。谢谢!是的,这看起来很棒。我会听从你的建议,考虑重新设计代码。但这肯定是一个有价值的解决方案。再次感谢。