- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经创建了一个在 List 之间进行映射的通用方法。它在 AutoMapper 版本 3.3.1 之前运行良好。在版本 4.0.0 之后它不工作了
public class Helper<T> : List<T> where T : new()
{
public void MapBetween(List<T> NewList, List<T> OldList)
{
try
{
foreach (var NewItem in NewList)
{
string PrimaryKey = NewItem.GetType().GetProperties().First(f => f.Name.ToLower() == typeof(T).Name.ToLower() + "id").GetValue(NewItem).ToString();
var OldItem = OldList.Find(delegate(T p) { return p.GetType().GetProperties()[0].GetValue(p).Equals(PrimaryKey); });
AutoMapper.Mapper.DynamicMap(NewItem, OldItem);//Mapping
}
}
catch (Exception ex)
{
throw ex;
}
}
}
public class Ac
{
public string AcId { get; set; }
public string A { get; set; }
public string B { get; set; }
}
public void ConvertList()
{
List<Ac> OldList = new List<Ac>();
OldList.Add(new Ac { AcId = "1", A = "Old A", B = "Old B" });
List<Ac> NewList = new List<Ac>();
NewList.Add(new Ac { AcId = "1", A = "new A", B = "new B" });
Helper<Ac> helper = new Helper<Ac>();
helper.MapBetween(NewList, OldList);
}
我的方法是否需要更改?
最佳答案
由于您映射到同一类型/从同一类型映射,因此 AutoMapper 使用其 AssignableMapper
它只是将源对象(NewList
中的一项)的值分配给目标对象(OldList
中的一项)。自 Ac
是引用类型但按值传递,当源设置为目标时,结果永远不会返回到目标对象。
AutoMapper 使用 <SourceType>.IsAssignableFrom(<DestinationType>)
当确定是否 AssignableMapper
应该使用,因为类型相同,所以使用它。 (在确定是否可以使用时,AutoMapper 可能还应检查 IsValueType
)。
在没有更多上下文的情况下,我将尝试了解如何使这项工作发挥作用,以便为您提供一个想法。您可以定义一个从现有类型 ( AcNew
) 继承的新类型(例如 Ac
),然后将其用于 NewList
或 OldList
.例如,您可以将新类型定义为:
public class AcNew : Ac {}
在ConvertList()
,然后您将使用:
List<AcNew> NewList = new List<AcNew>();
NewList.Add(new AcNew { AcId = "1", A = "new A", B = "new B" });
当您这样做时,AutoMapper 将不再使用 AssignableMapper
因为分配是 not possible between base & derived types .
问候,
罗斯
关于c# - AutoMapper DynamicMap 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35474727/
我正在学习带有 Bokeh 后端的 HoloViews,并且正在制作 Pandas 数据帧所选列的 iPython/Jupyter 显示(实际上它是一个 xarray 数据集,但用数据帧显示问题更简单
Automapper (3.1.1) 随机无法映射任何数据,这是一个非常奇怪的问题。创建对象 (ProductRating) 并返回,但实际上没有映射任何数据。当这种情况发生时,我已经进入了代码,re
在下面的简单场景中,为什么 TestMethod1 的输出为“test”而 TestMethod2 的输出为空?此外,如果您更改顺序并首先运行 TestMethod2,这两种方法都将输出 null。
我已经创建了一个在 List 之间进行映射的通用方法。它在 AutoMapper 版本 3.3.1 之前运行良好。在版本 4.0.0 之后它不工作了 public class Helper : Lis
我有以下代码片段。 var files = query.ToList(); var testFile = Mapper.DynamicMap(files.First()); var filesDto
我在通用方法中使用 Mapper.DynamicMap() 并希望在不使用 .CreateMap() 的情况下忽略一些任何为 null 的源值.这可能吗? 最佳答案 如果您希望忽略所有具有空值的源属性
我正在尝试使用 Holoviews 创建 DynamicMap 类型图的网格布局(例如 2x2)。这将作为 Holoviews/Bokeh 应用程序提供。 创建我的 dmaps 后,我使用它们来放置它
假设您使用 AutoMapper 映射的对象不需要自定义映射,这样做是否有意义: Mapper.CreateMap(); // .... Mapper.Map(SrcObject, DestObj);
我对 AutoMapper 比较陌生,但发现它非常强大,可以将 WCF 服务中的对象转换为 DTO(有点意思)。 今天我遇到了一个我认为应该可行但失败的情况。我在大多数地方都针对接口(interfac
我是一名优秀的程序员,十分优秀!