首页 > 解决方案 > 如何创建具有两种不同类类型的公共参数的泛型方法?

问题描述

我有这些代码将 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){}

标签: c#

解决方案


您可以使这两个类继承自同一个基类:

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
    }
}

我不确定这样做是否是一个好主意——这完全取决于上下文。


推荐阅读