【发布时间】:2017-10-03 20:04:16
【问题描述】:
我有一个在循环的每次迭代开始时实例化的类。在循环内部,它的属性需要填充存储过程返回的表的行值。因为我必须遍历每一行的每一列,为了知道类的哪个属性需要赋值以及何时赋值,我有一个字典,将列名映射到索引。该索引指的是列表中存储类实例属性的位置:
while (reader.Read() && reader.HasRows)
{
Subscription subscription = new Subscription();
List<string> subscrData = new List<string>
{
subscription.attr1,
subscription.attr2,
subscription.attr3,
subscription.attr4
}
Dictionary<string, int> columnDict = new Dictionary<string, int>
{
{"attr1": 0},
{"attr2":1},
{"attr3":2},
{"attr4":3}
}
foreach (string colName in columnDict.Keys)
{
if (reader.GetSchemaTable().Columns[colName] == null)
subscrData[columnDict[colName]] = "null";
else
{
subscrData[columnDict[colName]] = reader[colName].ToString();
nullsReturned = false;
}
}
我可能更多地来自 C++ 方法,因为您可以存储对类实例的引用并修改其属性,但这不适用于 C#,因为列表存储值。
如何重构此代码,以便修改类实例的实际属性,同时仍能够检查从存储过程返回的每一列是否不为空?
【问题讨论】:
标签: c# sql asp.net list dictionary