【问题标题】:Can not make method with same parameter types [duplicate]无法使用相同的参数类型制作方法[重复]
【发布时间】:2013-11-09 04:23:26
【问题描述】:

我有 2 个实体到 Dto 映射方法具有相同的参数,不允许使用相同的名称。

唯一要解决的问题是给 ToD 取一个更好的名字吗?其实我喜欢ToDto

并且使用 ToDto 或其他 ToEditSchoolyearDto 的某些方法在这里似乎不一致。

还有其他解决办法吗?

public static BrowseSchoolyearDTO ToDto(this Schoolyear schoolyear)
{
   return new BrowseSchoolyearDTO
   {
      // mapping props
   };
}

public static EditSchoolyearDTO ToDto(this Schoolyear schoolyear)
{
   return new EditSchoolyearDTO
   {
      // mapping props
   };
}

【问题讨论】:

  • 这些方法在做什么? Dtos 是否相关?像 AutoMapper 这样的工具可以在这里提供帮助吗?
  • 我刚刚删除了自动映射器,因为 DTO 映射的实体要困难得多,我不能再谈论自动映射了...
  • @Elisa:不知道您的具体情况,但当简单的自动映射不适合您时,您始终可以使用自定义类型解析器。
  • @AndrewWhitaker 我已经阅读了一些关于这些内容的文章,但我仍然必须进行设置。我可以在我的扩展方法中对 Linq 做同样的事情。这是一个我不在乎的小项目;-) 但是,如果您有一个很好的链接,如何使用自定义逻辑将多个 DTO 映射到另一个 DTO 属性,请继续向我抛出一个链接,我很感激;p

标签: c#


【解决方案1】:

您希望编译器如何确定您的意思?是的,如果您尝试使用相同的参数创建不同的方法,则需要为它们指定不同的名称。

我建议ToBrowseDtoToEditDto。那么你的意思就很清楚了。

【讨论】:

  • 据我了解,返回类型协方差在 C# 中不受支持。
  • @Sid:这不是问题所在——例如,Java 确实支持返回类型协变,但这并不意味着您可以使用相同的参数重载方法,而是不同的返回类型。
  • 你的正确答案,它肯定解决了目的。但是试图说明问题样本 sn-p 的内容是返回类型协方差。如果理解有误,请纠正我
  • @Sid:不正确的理解。返回类型协方差与通过提供具有“更窄”返回类型的方法或对接口执行相同操作来覆盖一个方法有关。
【解决方案2】:

您无法根据返回类型区分具有相同参数的方法。例如,如果我写了这段代码:

var dto = someSchoolyear.ToDto();

或此代码:

object dto = someSchoolyear.ToDto();

dto 的类型是什么?

【讨论】:

  • 还有someSchoolyear.ToDto();作为自己的一个语句,没有获取返回值,就是一个例子。
猜你喜欢
  • 2012-02-01
  • 2018-11-15
  • 1970-01-01
  • 2019-07-22
  • 2017-02-24
相关资源
最近更新 更多