使用接口向转换器 class 添加方法

Adding methods to converter class with an interface

我写了一个相当简单的转换 class,它将 Foo 转换为 Bar

因为我想要其他 classes 的多个转换器,所以我设置了一个接口,有两种方法:

public interface IConverter<in TSource, out TDestination>
{
    TDestination Convert(TSource sourceObject);
    IEnumerable<TDestination> ConvertMany(IEnumerable<TSource> sourceObjects);
}

我的 class 是这样实现的:

public class ObjectConverter : IConverter<Foo, Bar>
{
    public Bar Convert(Foo sourceObject)
    {
        return new Bar
        {
            // Mapping attributes...
        };
    }
    public IEnumerable<Bar> ConvertMany(IEnumerable<Foo> sourceObjects)
    {
        return sourceObjects.Select(obj => new Bar
            {
                // Mapping attributes...
            });
    }        
}

这一切都很棒。我想添加另一个 ConvertMany 方法,它将另一个对象作为源并 returns 它作为 Bar。将它添加到此 class 是否可以,因为它也 returns Bar 或者这是否更适合第二个 class 也实现了此接口?

我对 C# 和使用接口还很陌生,所以我不确定哪个更好。

(顺便说一句,这些有意义吗?有更好的选择吗?)

您应该添加另一个接口实现以实现预期结果:

public interface IConvertFromMany<TSource, TDestination>
{
    IEnumerable<TDestination> ConvertMany(IEnumerable<TSource> sourceObjects);
}

public interface IConverter<TSource, TDestination> : IConvertFromMany<TSource, TDestination>
{
    TDestination Convert(TSource sourceObject);

}

像这样使用它:

public class ObjectConverter : IConverter<Foo, Bar>, IConvertFromMany<AnotherSourceObject, Bar>
{
   //....your implementations here        
}