C# 在类中映射相同的对象类型属性将调用Equals和GetHashCode
我有这门课C# 在类中映射相同的对象类型属性将调用Equals和GetHashCode,c#,automapper,C#,Automapper,我有这门课 public class ConflictItem<T> where T : new() { public T CurrentItem { get; set; } public T RequestedUpdateItem { get; set; } } 我理解当列表中的对象相等或两个对象之间相等时,为什么Automapper会为另一个对象中的两个不同属性匹配相等?是否有任何方法可以通过配置覆盖此行为?库似乎添加了禁用缓存的
public class ConflictItem<T> where T : new()
{
public T CurrentItem { get; set; }
public T RequestedUpdateItem { get; set; }
}
我理解当列表中的对象相等或两个对象之间相等时,为什么Automapper会为另一个对象中的两个不同属性匹配相等?是否有任何方法可以通过配置覆盖此行为?库似乎添加了禁用缓存的选项,作为映射方法上的一个选项:
var output = Mapper.Map<T1, T2>(input, opt => opt.DisableCache = true);
var output=Mapper.Map(输入,opt=>opt.DisableCache=true);
尝试一下,看看它是否解决了你的问题
我一直在关注GitHub上的5.0测试版,似乎他们可能会在默认情况下禁用此缓存:
这不仅仅是基础集合本身吗?我用这个问题更新了问题,我最终在两个属性中接收到一个具有相同对象实例的ConflictItem。调用
Equals
如何导致这两个属性发生更改?我怀疑您实际上有一个糟糕的映射配置。你能展示一下你是如何映射的,以及你在哪里看到调用了Equals
吗?我知道这太奇怪了,我也不能解释它,但是我在类中的Equals overiden实现中设置了一个断点进行了验证。添加了配置。这是同样的问题。这里可能是:可怕的行为。投票最多的解决方案也非常糟糕。在最新的Nuget软件包版本中,默认缓存行为似乎发生了更改。
var output = Mapper.Map<T1, T2>(input, opt => opt.DisableCache = true);