我有一个问题,我不知道如何解决,我希望这里的人会有一些好的建议。
我正在解析文本文件,其中包含多个日志(每行一个日志)。格式类似于以下内容:
Date Type Description
10/20 A LogTypeADescription
10/20 B LogTypeBDescription
10/20 C LogTypeCDescription
在这里,您可以看到日志的三种“类型”(A、B 和 C)。根据日志的类型,我会以不同的方式解析“描述”字段。
我的问题是我应该如何设置数据结构?我想做这样的事情:
class Log
{
DateTime Date;
String Type;
String Description;
public Log(String line)
{
Parse(line);
}
}
class ALog : Log { }
class BLog : Log { }
class CLog : Log { }
现在,每个派生类都可以拥有自己独特的属性,具体取决于“描述”字段的解析方式,并且它们仍将保持三个“核心”属性(日期、类型和描述)。
到目前为止一切都很好,除了我不知道我需要什么类型的(派生)日志,直到我解析了日志文件中的行。当然,我可以解析该行,然后弄清楚,但我真的希望解析代码在“Log”构造函数中。我希望我能做这样的事情:
void Parse(String line)
{
String[] pieces = line.Split(' ');
this.Date = DateTime.Parse(pieces[0]);
this.Type = pieces[1];
this.Description = pieces[2];
if(this.Type == "A")
this = new ALog();
else if(this.Type == "B")
this = new BLog();
else if(this.Type == "C")
this = new CLog();
}
但不幸的是,我认为这是不可能的。我还没有尝试过,但我很确定这样做:
Log l = new Log(line);
if(l.Type == "A") l = new ALog();
要么是非法的,要么会破坏我第一次创建“日志”时所做的所有解析。
有什么建议么?