当您想要从datatable初始化类属性时,应该更合适。
即。
name=dt.Rows[0][0] or name=dt.Rows[0]["Name"]
哪种方法更具可扩展性,易于处理。 目前我使用第二种方法,但感觉就像我使用索引而不是名称,我只需要更改存储过程而不是UI。
但是会损害代码的可读性。那我该怎么办
答案 0 :(得分:1)
一种选择是介于两者之间:
private const int NameColumn = 0;
...
name = dt.Rows[0][NameColumn];
如果列排序/定义发生更改,那么一个位置可以更改,但在访问时也提供可读代码。我不确定它是否同时解决了必须同时更改UI代码和存储过程的问题:如果您的SP正在有效地更改其公共界面,您应该期望更改UI码。但是,这种方法可以减少这种变化的痛苦,并且不会使用魔法值乱丢你的代码。
(您可能还想考虑强类型数据集...或转移到非DataTable
数据解决方案,例如实体框架。它可能不适合您的情况,但值得考虑。)
答案 1 :(得分:1)
列名称,因为它使它更具可读性。如果您要更改存储过程,使用列索引将无助于您可能正在更改列的数量或顺序。
答案 2 :(得分:0)
使用数字索引比重复使用字符串索引更快。在遍历表行之前,您可以在运行时计算一次数字索引:
int indexName = dt.Columns.IndexOf("Name")