gpt4 book ai didi

c# - 在一些但不是所有 AutoMapper 映射中对浮点属性的特殊处理

转载 作者:太空狗 更新时间:2023-10-29 21:54:08 24 4
gpt4 key购买 nike

我刚刚开始使用 C# 中的 AutoMapper。我已经成功创建了这样的映射:

Mapper.CreateMap<InputTypeA, OutputTypeA>()

我还找到了一种向特定属性添加一些逻辑的方法,例如将日期(在 InputTypeA 中)格式化为特定格式(在 OutputTypeA 中)的字符串。

.ForMember(
dest => dest.MyDateProperty,
opt => opt.ResolveUsing(
src => String.Format("{0:yyyy-MM-dd}", src.MyDateProperty)));

现在我需要对许多 float 属性执行相同的操作,但我想知道是否有一种简短/简单的方法来执行此操作,除了为需要的每个属性复制一段代码(如上面的代码)遵守这条规则。

我发现我可以创建一个像这样的新映射来将 float 映射到字符串:

Mapper.CreateMap<float,string>()
.ConvertUsing(src =>
String.Format(CultureInfo.InvariantCulture.NumberFormat, "{0:0.00}", src));

这可行,但过于通用,因为我还有另一种类型的映射(我们称之为 InputTypeB),它也包含需要区别对待的浮点属性。

Mapper.CreateMap<InputTypeB, OutputTypeB>()

如何使第一个映射中的浮点到字符串映射部分成为唯一?

最佳答案

您可以基于两个单独的配置创建两个单独的映射器,其中只有一个包含浮点到字符串的映射:

public class InputTypeA { public float Foo { get; set; } }

public class OutputTypeA { public string Foo { get; set; } }

public class InputTypeB { public float Bar { get; set; } }

public class OutputTypeB { public string Bar { get; set; } }

public class Program
{
public static void Main(string[] args)
{
Func<float, string> mapFunc =
src => String.Format(CultureInfo.InvariantCulture.NumberFormat, "{0:0.00}", src);

var floatToStringConfig = new MapperConfiguration(cfg =>
{
cfg.CreateMap<InputTypeA, OutputTypeA>();
cfg.CreateMap<float, string>().ConvertUsing(mapFunc);
});

var regularConfig = new MapperConfiguration(cfg =>
{
cfg.CreateMap<InputTypeB, OutputTypeB>();
});

IMapper floatToStringMapper = floatToStringConfig.CreateMapper();
IMapper regularMapper = regularConfig.CreateMapper();

var aIn = new InputTypeA() { Foo = 1f };
var aOut = floatToStringMapper.Map<OutputTypeA>(aIn);

Console.WriteLine(aOut.Foo); // prints "1.00"

var bIn = new InputTypeB() { Bar = 1f };
var bOut = regularMapper.Map<OutputTypeB>(bIn);

Console.WriteLine(bOut.Bar); // prints "1"
}
}

关于c# - 在一些但不是所有 AutoMapper 映射中对浮点属性的特殊处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22483605/

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