C# 初始化数据表中的某些值时应该使用什么

C# 初始化数据表中的某些值时应该使用什么,c#,coding-style,scalability,C#,Coding Style,Scalability,当您想要从datatable初始化类属性时,应该使用什么更合适 i、 e 哪种方法更具可扩展性,更易于处理。 目前我使用第二种方法,但感觉如果我使用索引而不是名称,我只需要更改存储过程,而不是UI 但会影响代码的可读性。因此,我应该做什么呢?一个选择是在两者之间加入一些东西: private const int NameColumn = 0; ... name = dt.Rows[0][NameColumn]; 如果列的顺序/定义发生更改,您可以在其中进行更改,但也可以在访问点提供可读的代码。

当您想要从datatable初始化类属性时,应该使用什么更合适

i、 e

哪种方法更具可扩展性,更易于处理。 目前我使用第二种方法,但感觉如果我使用索引而不是名称,我只需要更改存储过程,而不是UI


但会影响代码的可读性。因此,我应该做什么呢?一个选择是在两者之间加入一些东西:

private const int NameColumn = 0;
...
name = dt.Rows[0][NameColumn];
如果列的顺序/定义发生更改,您可以在其中进行更改,但也可以在访问点提供可读的代码。我不确定它是否解决了必须同时更改UI代码和存储过程的问题:如果您的SP正在有效地更改其公共接口,您应该期望更改UI代码。但是,这种方法可以减少这种更改带来的痛苦,并且不会在代码中乱扔神奇的值


(您可能还需要考虑强类型数据集……或者移动到非<代码> Databate< /Cata>数据解决方案,如实体框架。在您的情况下可能不合适,但值得考虑。)

列名,因为它使它更可读。如果要更改存储过程,使用列索引不会有多大帮助,因为可能会更改列的数量或顺序。

使用数字索引比重复使用字符串索引更快。在循环遍历表行之前,可以在运行时计算一次数值索引,如下所示:

int indexName = dt.Columns.IndexOf("Name")

这意味着在某种程度上向TypedDataSets移动。“是这样吗?乔恩?”珊塔努:不一定。毕竟,它并没有改变您正在处理的类型,只是改变了您访问特定列的方式。诚然,转移到强类型数据集可能是一个合适的步骤,但您绝对不必这样做。考虑到这可能是,假设每个数据集有10个表,每个表有10列,为每一列声明字段难道不是一种开销吗?@devnull:比在代码中分散100个相同的魔法值要少。假设两个表都使用相同的列名(“CustomerName”),然后其中一个表发生更改。。。如果您已经将这两个字段作为单独的字段来开始,那么正确地处理这两个字段是很容易的。如果在整个代码中对两列都使用了字符串文字“CustomerName”,那么必须检查使用它的每一位代码。哎哟
int indexName = dt.Columns.IndexOf("Name")