C# 是否可以创建一个未指定方法返回类型的接口?

C# 是否可以创建一个未指定方法返回类型的接口?,c#,generics,interface,C#,Generics,Interface,我发现很难用英语来描述这一点,因为这不是我的第一语言,所以我希望这个问题/标题有意义 我需要知道我是否可以用一个方法创建一个接口,该方法可以返回实现中的任何类型 我想制作一个通用映射器,可以将它注入到另一个类中。但是我想知道我是否可以制作一个通用的映射器,或者我是否需要为不同的类型制作不同的接口。对我来说,创建不同的接口似乎毫无意义,这些接口的功能相同,但返回类型不同 有点像这样: public interface IMapper() { T MapObject() where T =

我发现很难用英语来描述这一点,因为这不是我的第一语言,所以我希望这个问题/标题有意义

我需要知道我是否可以用一个方法创建一个接口,该方法可以返回实现中的任何类型

我想制作一个通用映射器,可以将它注入到另一个类中。但是我想知道我是否可以制作一个通用的映射器,或者我是否需要为不同的类型制作不同的接口。对我来说,创建不同的接口似乎毫无意义,这些接口的功能相同,但返回类型不同

有点像这样:

public interface IMapper()
{
    T MapObject() where T = the return type
    List<T> MapList() where T = the return type;
}

public class OrderMapper : IMapper()
{
   OrderDetails MapObject()
   {
      mapping code...
      return OrderDetails;
   }
}

public class CustomerMapper : IMapper()
{
    CustomerDetails MapObject()
    {
        mapping code...
        return CustomerDetails;
    }
}
公共接口IMapper()
{
T MapObject(),其中T=返回类型
List MapList(),其中T=返回类型;
}
公共类OrderMapper:IMapper()
{
OrderDetails映射对象()
{
映射代码。。。
退货订单详情;
}
}
公共类CustomerMapper:IMapper()
{
CustomerDetails映射对象()
{
映射代码。。。
返回客户详细信息;
}
}
这可能吗?或者我只是迟钝,我需要做不同的接口。

正是您需要的:

public interface IMapper<T>
{
    T MapObject();
    List<T> MapList();
}

public class OrderMapper : IMapper<OrderDetails>
{
    public OrderDetails MapObject()
    {
        //  mapping code...

        return new OrderDetails();
    }

    public List<OrderDetails> MapList()
    {
        throw new NotImplementedException();
    }
}

public class CustomerMapper : IMapper<CustomerDetails>
{
    public CustomerDetails MapObject()
    {
        //  mapping code...

        return new CustomerDetails());
    }

    public List<CustomerDetails> MapList()
    {
        throw new NotImplementedException();
    }
}
公共接口IMapper
{
T映射对象();
列表映射列表();
}
公共类OrderMapper:IMapper
{
public OrderDetails映射对象()
{
//映射代码。。。
返回新的OrderDetails();
}
公共列表映射列表()
{
抛出新的NotImplementedException();
}
}
公共类CustomerMapper:IMapper
{
公共CustomerDetails映射对象()
{
//映射代码。。。
返回新的CustomerDetails());
}
公共列表映射列表()
{
抛出新的NotImplementedException();
}
}
正是您所需要的:

public interface IMapper<T>
{
    T MapObject();
    List<T> MapList();
}

public class OrderMapper : IMapper<OrderDetails>
{
    public OrderDetails MapObject()
    {
        //  mapping code...

        return new OrderDetails();
    }

    public List<OrderDetails> MapList()
    {
        throw new NotImplementedException();
    }
}

public class CustomerMapper : IMapper<CustomerDetails>
{
    public CustomerDetails MapObject()
    {
        //  mapping code...

        return new CustomerDetails());
    }

    public List<CustomerDetails> MapList()
    {
        throw new NotImplementedException();
    }
}
公共接口IMapper
{
T映射对象();
列表映射列表();
}
公共类OrderMapper:IMapper
{
public OrderDetails映射对象()
{
//映射代码。。。
返回新的OrderDetails();
}
公共列表映射列表()
{
抛出新的NotImplementedException();
}
}
公共类CustomerMapper:IMapper
{
公共CustomerDetails映射对象()
{
//映射代码。。。
返回新的CustomerDetails());
}
公共列表映射列表()
{
抛出新的NotImplementedException();
}
}

Argh,你赢了我:)完全相同的代码和参考链接!非常感谢,这正是我需要的!啊,你比我快:)完全相同的代码和参考链接!非常感谢,这正是我需要的@Virustinity编辑标题时,请确保检查标记是否应位于标题中。@Virustinity编辑标题时,请确保检查标记是否应位于标题中。