gpt4 book ai didi

c# - 使用 AutoMapper 时将日志添加到目标对象

转载 作者:太空宇宙 更新时间:2023-11-03 23:14:34 25 4
gpt4 key购买 nike

使用 AutoMapper 时是否可以将日志添加到目标对象?

如果我有两个对象:

class A
{
int PropertyOne
int PropertyTwo
int PropertyThree
List<string> Log
}

class B
{
int PropertyOne
int PropertyTwo
}

当从 B 映射到 A 时,我想自动将日志条目添加到 A.Log 中,用于更改每个属性。

例如如果在映射操作期间,PropertyOne = 3 在两个对象上,但 A.PropertyTwo = 1 和 B.PropertyTwo = 2,我想将日志条目添加到 A.Log - 最好是像“PropertyTwo 从 1 更改为2"

最佳答案

创建一个带有自定义 setter 的属性,而不是自动属性,您可以在其中向日志列表添加条目。

示例控制台应用程序:

public static class Program
{
public class A
{
private int _PropertyOne;
private int _PropertyTwo;
private int _PropertyThree;

public int PropertyOne
{
get { return _PropertyOne; }
set
{
if (value == _PropertyOne)
return;

Log.Add(string.Format("PropertyOne changing value from {0} to {1}", _PropertyOne, value));
_PropertyOne = value;
}
}

public int PropertyTwo
{
get { return _PropertyTwo; }
set
{
if (value == _PropertyTwo)
return;

Log.Add(string.Format("PropertyOne changing value from {0} to {1}", _PropertyTwo, value));
_PropertyTwo = value;
}
}

public int PropertyThree
{
get { return _PropertyThree; }
set
{
if (value == _PropertyThree)
return;

Log.Add(string.Format("PropertyOne changing value from {0} to {1}", _PropertyThree, value));
_PropertyThree = value;
}
}

public List<string> Log { get; private set; }

public A()
{
Log = new List<string>();
}
}

public class B
{
public int PropertyOne { get; set; }
public int PropertyTwo { get; set; }
}

public static void Main(string[] args)
{
AutoMapper.Mapper.Initialize(cfg =>
{
cfg.CreateMap<A, B>().ReverseMap();
});

var b = new B() {PropertyOne = 1, PropertyTwo = 2};
var a = AutoMapper.Mapper.Map<B, A>(b);

a.Log.ForEach(s => Console.WriteLine(s));
}
}

这将输出:

PropertyOne changing value from 0 to 1

PropertyTwo changing value from 0 to 2

关于c# - 使用 AutoMapper 时将日志添加到目标对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37699827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com