有没有更好的方法来初始化记录数组以使其更具动态性? C#
Is there a better way to Initialize a record array to make it more dynamic? C#
关于我的代码的一些背景,我基本上有一个记录 class,它有很多属性来捕获以 .txt 文件形式提供的所需数据,每一列都分为自己单独的文件即 Month.txt、Day.txt,每个包含 600 行数据。
现在,我有第二个数组,它基本上是上述 class 的集合,我给它的最大值为 600(因为有 600 个数据)。此 class 具有初始化方法。
这样它会在每一列初始化我的记录,但我必须知道行的固定大小不会 运行 进入索引超出范围异常。另外,我有很多属性,所以整个 "if else" 语句使这段代码看起来非常冗余并且很难看。灵活性也是一个问题,因为点重置为 0,所以当我想添加额外的数据时,我将覆盖原来的 600。
有什么可以改进的吗?
该代码不是最理想的,因为它会检查该文件中每一行的文件名。最好在循环之前决定设置哪个字段,然后在整个循环中使用该决定。
首先,根据文件前缀查找table个setters:
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
初始值设定项添加新行即可。
关于我的代码的一些背景,我基本上有一个记录 class,它有很多属性来捕获以 .txt 文件形式提供的所需数据,每一列都分为自己单独的文件即 Month.txt、Day.txt,每个包含 600 行数据。
现在,我有第二个数组,它基本上是上述 class 的集合,我给它的最大值为 600(因为有 600 个数据)。此 class 具有初始化方法。
这样它会在每一列初始化我的记录,但我必须知道行的固定大小不会 运行 进入索引超出范围异常。另外,我有很多属性,所以整个 "if else" 语句使这段代码看起来非常冗余并且很难看。灵活性也是一个问题,因为点重置为 0,所以当我想添加额外的数据时,我将覆盖原来的 600。
有什么可以改进的吗?
该代码不是最理想的,因为它会检查该文件中每一行的文件名。最好在循环之前决定设置哪个字段,然后在整个循环中使用该决定。
首先,根据文件前缀查找table个setters:
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
初始值设定项添加新行即可。