c# - 如何创建具有两种不同类类型的公共参数的泛型方法?
问题描述
我有这些代码将 xml 文件反序列化为 C# 对象以供进一步处理。所有这些作品。但问题是有两种不同类型的 xml 文件。一份用于每月,一份用于每日。这两个文件的 xml 架构不同,但有些架构是相同的。
这是代码
var serializer = new XmlSerializer(typeof(Daily.ABC));
using (TextReader reader = new StreamReader(new FileStream(filePath, FileMode.Open)))
{
var pfaCollection = (Daily.ABC)serializer.Deserialize(reader);
foreach (var entity in pfaCollection.Records.Entity)
{
IngestEntity(entity);
}
}
这是每月的:
var serializer = new XmlSerializer(typeof(Monthly.Entity.ABC));
using (TextReader reader = new StreamReader(new FileStream(filePath, FileMode.Open)))
{
var pfaCollection = (Monthly.Entity.ABC)serializer.Deserialize(reader);
foreach (var entity in pfaCollection.Entity)
{
IngestEntity(entity);
}
}
正如你所看到的,这些类是不同的,但由于有一些共同的模式,我为两者创建了一个方法。干燥。我的 IngestEntity 方法如下:
private void IngestEntity(? EntityData){}
解决方案
您可以使这两个类继承自同一个基类:
class ABCBase { }
class DailyABC : ABCBase { }
class MonthlyABC : ABCBase { }
private void IngestEntity(ABCBase entity)
{
// common code here
dosomething(entity.foo);
if(entity is DailyABC daily)
{
// daily code here
}
if(entity is MonthlyABC daily)
{
// monthly code here
}
}
我不确定这样做是否是一个好主意——这完全取决于上下文。
推荐阅读
- date - 如何使用 unix 在一行 csv 文件中将 23/1/17 转换为 23/01/2017?
- r - 如何使用 list.files 对目录中的 .Rmd 文件进行子集化
- python - 使用带有参数的 Pandas 从 QuestDb 查询时间序列
- docusignapi - 有没有办法在信封(不带扩展名)中获取文档的文件类型?
- hadoop - 列出 HDFS 上 zip 文件的内容
- python - Pandas 数据框:将长正则表达式拆分为多行
- python - PYGAME - 用向量移动字符
- kubernetes - 在裸机上部署 Openstack Magnum
- python - 以正确的顺序生成 WHL 文件列表以供离线安装
- javascript - 我的 DC Bot 发送消息两次或更多次