2010-08-03 47 views
0

當您想從數據表初始化類屬性時,應該使用什麼更合適?從DataTable初始化某些值時我們應該使用什麼

name=dt.Rows[0][0] or name=dt.Rows[0]["Name"] 

哪種方法更具擴展性的任何好辦。 目前我使用第二種方法,但感覺就像如果我使用索引而不是名稱,我只需要更改存儲過程,而不是UI。

但是降低了代碼的可讀性。所以,我應該去什麼

回答

1

一種選擇是有介於兩者之間:這讓你一個的地方,如果列排序/定義改改

private const int NameColumn = 0; 
... 
name = dt.Rows[0][NameColumn]; 

,也給了可讀的代碼在訪問點。我不確定它是否解決了必須同時更改UI代碼和存儲過程的問題:如果您的SP正在有效更改其公共界面,則應該希望更改UI代碼。但是,這種方法可以減少這種變化的痛苦,並且不會用魔法值拋棄代碼。

(您可能還需要考慮強類型數據集...或者移動到非DataTable數據解決方案,如實體框架,這可能不是你的情況適合,但它是值得考慮的。)

+0

這意味着有些趨向於TypedDataSets。這是Jon嗎? – 2010-08-03 06:17:38

+0

@Shantanu:不一定。畢竟,這並不會改變你處理的是哪種類型,而是你如何訪問特定的列。現在承認移動到強類型數據集可能是一個合適的步驟,但你絕對不*有*。 – 2010-08-03 06:33:58

+0

考慮到可能,比方說,每個數據集10個表,每個10列,不會宣佈每個列的字段被認爲是一個開銷? – devnull 2010-08-03 06:45:59

1

列名稱,因爲它使它更具可讀性。如果您要更改存儲過程,使用列索引不會有太大的幫助,因爲您可能正在更改列的數量或順序。

0

使用數字索引比重複使用字符串索引要快。您可以在運行時計算一次數字索引,然後循環遍歷表格行,如下所示:

int indexName = dt.Columns.IndexOf("Name") 
相關問題