gpt4 book ai didi

c# - 重铸为派生类型

转载 作者:行者123 更新时间:2023-11-30 14:17:07 27 4
gpt4 key购买 nike

我有一个问题,我不确定如何解决,我希望这里的人能提供一些好的提示。

我正在解析文本文件,其中包含多个日志(每行一个日志)。格式类似于以下内容:

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();

要么是非法的,要么会破坏我第一次创建“日志”时所做的所有解析。

有什么建议吗?

最佳答案

删除构造函数并将 Parse 更改为返回 Log 的静态。

static Log Parse(string line)
{
string[] tokens line.Split(' ');
var log = null;
if (tokens[1] == "A") log = new ALog();
else if (tokens[1] == "B") log = new BLog();
else log = new CLog();
log.Date = tokens[0];
log.Description = tokens[1];
return log;
}

关于c# - 重铸为派生类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6419147/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com