我正在读取CSV文件,并希望将结果缓存到数组中。
这是我的getter/setter:
private RedirectionRule[] RedirectionRules
{
get
{
if (_redirectionRules == null)
{
return new RedirectionRule[MAXLENGTH];
}
return _redirectionRules;
}
set
{
_redirectionRules = value;
}
}这是缓存结果的最佳方法吗?
发布于 2009-11-02 20:41:46
当_redirectionRules为null时,我不认为在getter中返回新数组有多大意义。如果您在解析CSV的代码中设置了该属性,那么它将被缓存。
换句话说,在某个地方,您应该有一个这样的函数来解析CSV数据(例如,我将它放在RedirectionRule类中,但您可以有一个RedirectionRuleParser类或类似的类,这取决于您的需求):
class RedirectionRule {
public static RedirectionRule Parse(string text) {
// some code here to parse text for your RedirectionRule object
}
public static RedirectionRule[] ParseCsv(string csv) {
string[] values = csv.Split(',');
RedirectionRule[] rules = new RedirectionRule[values.Length];
for (int i = 0; i < values.Length; i++) {
rules[i] = RedirectionRule.Parse(values[i]);
}
}
}然后,如果你在某个地方有这样的代码,你就是在缓存数据:
string csv = "RuleType1,RuleType1,RuleType1";
RedirectionRules = RedirectionRule.ParseCsv(csv);在其他地方,您希望访问已缓存的数据:
if (RedirectionRules != null) {
// do something with your cached data
} else {
// I don't know, throw an exception or something
}通过在属性的getter中创建一个新的RedirectionRule[MAXLENGTH]数组,示例代码能够完成的唯一一件事就是偷偷通过上面的RedirectionRules != null检查,从而打开了访问看似已缓存但实际上是凭空产生的数据的可能性。
发布于 2009-11-02 20:55:25
我不确定我真的理解了这个问题,因为我不确定您问的是以下哪一个问题
也许你问了所有3个问题,所以我会尽我所能回答所有3个问题。
发布于 2009-11-02 20:42:25
一般来说,很难说,这取决于你到底需要什么。
另一种想法是:当您在getter中创建完整大小的数组时,为什么还需要setter呢?为了保持数组的整洁,应该只有一个创建数组的位置。
然后-当你创建数组一次,这是肯定的,为什么不在构造函数中创建它呢?
https://stackoverflow.com/questions/1661060
复制相似问题