map映射

本文介绍了一个.NET中用于类型映射的AutoMapper扩展方法,包括单个对象映射、集合列表映射等功能,适用于不同场景下的数据转换需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

using System;
using AutoMapper;
using System.Collections;
using System.Collections.Generic;

namespace Infrastructure
{
public static class AutoMapperExt
{
/// <summary>
/// 类型映射
/// </summary>
public static T MapTo<T>(this object obj)
{
if (obj == null) return default(T);

var config = new MapperConfiguration(cfg=>cfg.CreateMap(obj.GetType(),typeof(T)));
var mapper = config.CreateMapper();
return mapper.Map<T>(obj);
}

/// <summary>
/// 集合列表类型映射
/// </summary>
public static List<TDestination> MapToList<TDestination>(this IEnumerable source)
{
Type sourceType = source.GetType().GetGenericArguments()[0]; //获取枚举的成员类型
var config = new MapperConfiguration(cfg => cfg.CreateMap(sourceType, typeof(TDestination)));
var mapper = config.CreateMapper();

return mapper.Map<List<TDestination>>(source);
}

/// <summary>
/// 集合列表类型映射
/// </summary>
public static List<TDestination> MapToList<TSource, TDestination>(this IEnumerable<TSource> source)
{
var config = new MapperConfiguration(cfg => cfg.CreateMap(typeof(TSource), typeof(TDestination)));
var mapper = config.CreateMapper();

return mapper.Map<List<TDestination>>(source);
}

/// <summary>
/// 类型映射
/// </summary>
public static TDestination MapTo<TSource, TDestination>(this TSource source, TDestination destination)
where TSource : class
where TDestination : class
{
if (source == null) return destination;

var config = new MapperConfiguration(cfg => cfg.CreateMap(typeof(TSource), typeof(TDestination)));
var mapper = config.CreateMapper();
return mapper.Map<TDestination>(source);
}

}
}

转载于:https://www.cnblogs.com/zhang-wenbin/p/10998239.html

### 关于Map映射的概念 #### Map 的定义 `Map` 是一种数据结构,用于存储键值对(key-value pairs)。它是一种关联数组的形式,在其中通过唯一的关键字(key)访问相应的值(value)。在 Java 中,`Map` 是一个接口类,其本身并不提供具体的实现方式,而是由子类如 `HashMap` 和 `TreeMap` 提供具体的功能[^1]。 #### 键的特性 在一个 `Map` 中,所有的键都是唯一的。如果尝试向 `Map` 插入具有相同键的新条目,则会覆盖旧的值[^4]。这意味着对于同一个键,只会存在一个与其对应的价值。 #### 值的特点 虽然键必须是独一无二的,但是不同的键可以拥有相同的值。换句话说,多个键能够指向同样的价值对象[^5]。 #### 底层实现机制简介 - **`HashMap`**: 它基于哈希表实现,提供了快速存取的能力。它的性能通常优于其他类型的映射,但在遍历顺序方面没有保障。 - **`TreeMap`**: 使用红黑树作为基础构建,因此它可以保持按键自然排序或者定制比较器指定的顺序排列元素。 #### 方法概览 以下是几个常用的 `Map` 接口的方法及其功能描述: - `.put(K key, V value)`:将指定的键与指定的值相关联;如果此映射先前包含了一个该键的映射关系,则替换旧值并返回原来的值。 - `.get(Object key)` :返回特定键所映射到的值;如果没有找到这样的键则返回 null。 - `.remove(Object key)` : 删除指定键的映射关系(如果存在的话),并返回之前与此键相对应的值。 - `.containsKey(Object key)` : 判断是否含有某给定的键。 - `.size()` : 返回这个映射中的键-值映射数量。 - `.isEmpty()` : 测试此映射是否为空。 - `.keySet()` : 返回一个包含所有键的集合视图[^5]。 ```java import java.util.HashMap; import java.util.Map; public class Example { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); // 添加元素 map.put("apple", "red"); map.put("banana", "yellow"); // 访问元素 System.out.println(map.get("apple")); // 移除元素 map.remove("banana"); // 检查大小 int size = map.size(); System.out.println(size); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值