zhengyuxuan
2025-04-03 f44b19122e88c377fe20f504e31da3910659c441
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
 
namespace LifePayment.Domain.Shared;
 
/// <summary>
/// 集合扩展
/// </summary>
public static class ListExtensions
{
    /// <summary>
    /// 异步循环
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="list"></param>
    /// <param name="func"></param>
    /// <returns></returns>
    public static async Task ForEachAsync<T>(this List<T> list, Func<T, Task> action)
    {
        foreach (var value in list)
        {
            await action(value);
        }
    }
 
    /// <summary>
    /// 异步循环
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="source"></param>
    /// <param name="action"></param>
    /// <returns></returns>
    public static async Task ForEachAsync<T>(this IEnumerable<T> source, Func<T, Task> action)
    {
        foreach (var value in source)
        {
            await action(value);
        }
    }
 
    /// <summary>
    /// 是否为null或空集合
    /// </summary>
    /// <param name="source"></param>
    /// <returns></returns>
    public static bool IsNullOrEmpty(this IEnumerable source)
    {
        return (source == null || !source.HasItems());
    }
 
    /// <summary>
    /// 是否不为null或空集合
    /// </summary>
    /// <param name="source"></param>
    /// <returns></returns>
    public static bool IsNotNullOrEmpty(this IEnumerable source)
    {
        return !IsNullOrEmpty(source);
    }
 
    /// <summary>
    /// 是否有元素
    /// </summary>
    /// <param name="source"></param>
    /// <returns></returns>
    public static bool HasItems(this IEnumerable source)
    {
        return source != null && source.GetEnumerator().MoveNext();
    }
 
    ///// <summary>
    ///// 根据指定间隔字符将集合合并为字符串
    ///// </summary>
    ///// <param name="source"></param>
    ///// <param name="separator"></param>
    ///// <returns></returns>
    //public static string JoinAsString(this IEnumerable<string> source, string separator)
    //{
    //    return string.Join(separator, source);
    //}
 
    /// <summary>
    /// 根据指定间隔字符将集合合并为字符串
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="source"></param>
    /// <param name="separator"></param>
    /// <returns></returns>
    public static string JoinAsString<T>(this IEnumerable<T> source, string separator)
    {
        return string.Join(separator, source);
    }
 
    /// <summary>
    /// ICollection批量添加元素
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="collection"></param>
    /// <param name="items"></param>
    /// <exception cref="ArgumentNullException"></exception>
    public static void AddRange<T>(this ICollection<T> collection, IEnumerable<T> items)
    {
        if (collection == null)
            throw new ArgumentNullException(nameof(collection));
 
        if (items == null)
            throw new ArgumentNullException(nameof(items));
 
        if (collection is List<T> list)
        {
            list.AddRange(items);
        }
        else
        {
            foreach (var item in items)
            {
                collection.Add(item);
            }
        }
    }
 
    /// <summary>
    /// 转换为值为object类型的字典
    /// </summary>
    /// <typeparam name="TK"></typeparam>
    /// <typeparam name="TV"></typeparam>
    /// <param name="resource"></param>
    /// <returns></returns>
    public static Dictionary<TK, object> ToObjectDic<TK, TV>(this IDictionary<TK, TV> resource) where TV : class
    {
        var result = new Dictionary<TK, object>();
        foreach (var item in resource)
        {
            result.Add(item.Key, (object)item.Value);
        }
        return result;
    }
}