該代碼並不理想,因爲它會檢查該文件中每行的文件名。最好決定在循環之前設置哪個字段,然後在整個循環中使用該決定。
首先,基於文件的前綴制定者的查找表:
var setters = new Dictionary<string,Action<Record,string>> {
["Day"] = (r,v) => r.Day = v
, ["Month"] = (r,v) => r.Month = v
, ...
};
有了這個查詢,閱讀代碼變得簡單明瞭:
using (StreamReader R = new StreamReader(file.FullName)) {
var pos = File.Name.IndexOf("_");
Action<Record,string> fieldSetter;
if (pos < 0 || !setters.TryGetValue(File.Name.Substring(0, pos), out fieldSetter)) {
continue; // Go to next file
}
string temp;
while((temp = R.ReadLine()) != null) {
fieldSetter(records[pointer++], temp);
}
}
首先,我們使用文件名稱前面的第一個下劃線字符'_'
來查找setter。然後我們檢查文件中的行,併爲每個記錄傳遞我們得到的字符串調用setter。
添加新字段也變得很簡單,因爲您只需將一個新行添加到setters
初始值設定項。
我剛剛瞭解了lambda表達式和委託,因爲你;謝謝。 – Vocaloidas