From f0758b5ba3f7a486e3af1724031f00e431f482ff Mon Sep 17 00:00:00 2001 From: TimChen Date: Fri, 8 Sep 2023 00:18:08 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0clone=E7=9A=84=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EasyTool.Core/CloneCategory/CloneExtension.cs | 12 ++++ .../CloneCategory/CloneExtensionTests.cs | 56 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 EasyTool.Core/CloneCategory/CloneExtension.cs create mode 100644 EasyTool.CoreTests/CloneCategory/CloneExtensionTests.cs diff --git a/EasyTool.Core/CloneCategory/CloneExtension.cs b/EasyTool.Core/CloneCategory/CloneExtension.cs new file mode 100644 index 0000000..43f892d --- /dev/null +++ b/EasyTool.Core/CloneCategory/CloneExtension.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace EasyTool.Extension +{ + public static class CloneExtension + { + //定义一个泛型方法,接受一个泛型参数 T,并返回一个 T 类型的对象 + public static T Clone(this T obj)=> CloneUtil.Clone(obj); + } +} diff --git a/EasyTool.CoreTests/CloneCategory/CloneExtensionTests.cs b/EasyTool.CoreTests/CloneCategory/CloneExtensionTests.cs new file mode 100644 index 0000000..730bcb7 --- /dev/null +++ b/EasyTool.CoreTests/CloneCategory/CloneExtensionTests.cs @@ -0,0 +1,56 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using EasyTool.Extension; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EasyTool.Extension.Tests +{ + [TestClass()] + public class CloneExtensionTests + { + [TestMethod()] + public void CloneTest() + { + var obj1 = new First() + { + MyProperty1 = 1, + MyProperty2 = "A", + Second1 = new Second() + { + MyProperty1 = 2, + MyProperty2 = "B", + }, + Second2 = new Second() + { + MyProperty1 = 3, + MyProperty2 = "C", + } + }; + var obj2 = obj1.Clone(); + + Assert.AreEqual(obj1.MyProperty1, obj2.MyProperty1); + Assert.AreEqual(obj1.Second1.MyProperty1, obj2.Second1.MyProperty1); + } + + [Serializable] + public class First + { + public int MyProperty1 { get; set; } + public string MyProperty2 { get; set; } + + public Second Second1 { get; set; } + + public Second Second2 { get; set; } + } + + [Serializable] + public class Second + { + public int MyProperty1 { get; set; } + public string MyProperty2 { get; set; } + } + } +} \ No newline at end of file From 14ce1f6da82bb4936def21e34dedc8f2dcf86275 Mon Sep 17 00:00:00 2001 From: TimChen Date: Fri, 8 Sep 2023 19:57:22 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=9B=86=E5=90=88?= =?UTF-8?q?=E6=89=A9=E5=B1=95=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ctionaryUtil.cs => DictionaryExtension.cs} | 4 +-- .../CollectionsCategory/IteratorUtil.cs | 1 + .../LinkedListExtension.cs | 30 +++++++++++++++++ .../CollectionsCategory/ListExtension.cs | 19 +++++++++++ .../CollectionsCategory/QueueExtension.cs | 33 +++++++++++++++++++ .../CollectionsCategory/StackExtension.cs | 19 +++++++++++ 6 files changed, 104 insertions(+), 2 deletions(-) rename EasyTool.Core/CollectionsCategory/{DictionaryUtil.cs => DictionaryExtension.cs} (98%) create mode 100644 EasyTool.Core/CollectionsCategory/LinkedListExtension.cs create mode 100644 EasyTool.Core/CollectionsCategory/ListExtension.cs create mode 100644 EasyTool.Core/CollectionsCategory/QueueExtension.cs create mode 100644 EasyTool.Core/CollectionsCategory/StackExtension.cs diff --git a/EasyTool.Core/CollectionsCategory/DictionaryUtil.cs b/EasyTool.Core/CollectionsCategory/DictionaryExtension.cs similarity index 98% rename from EasyTool.Core/CollectionsCategory/DictionaryUtil.cs rename to EasyTool.Core/CollectionsCategory/DictionaryExtension.cs index 2d4e01c..e3f7900 100644 --- a/EasyTool.Core/CollectionsCategory/DictionaryUtil.cs +++ b/EasyTool.Core/CollectionsCategory/DictionaryExtension.cs @@ -3,9 +3,9 @@ using System.Linq; using System.Text; -namespace EasyTool +namespace EasyTool.Extension { - public static class DictionaryUtil + public static class DictionaryExtension { /// /// 获取字典中指定键的值,如果字典中不存在该键,则返回默认值 diff --git a/EasyTool.Core/CollectionsCategory/IteratorUtil.cs b/EasyTool.Core/CollectionsCategory/IteratorUtil.cs index db59026..b707296 100644 --- a/EasyTool.Core/CollectionsCategory/IteratorUtil.cs +++ b/EasyTool.Core/CollectionsCategory/IteratorUtil.cs @@ -5,6 +5,7 @@ namespace EasyTool { + //TODO:疑问,这些功能Linq支持吗? /// /// 迭代器工具类 /// diff --git a/EasyTool.Core/CollectionsCategory/LinkedListExtension.cs b/EasyTool.Core/CollectionsCategory/LinkedListExtension.cs new file mode 100644 index 0000000..3a1487a --- /dev/null +++ b/EasyTool.Core/CollectionsCategory/LinkedListExtension.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace EasyTool.Extension +{ + + /// + /// 双向链表工具类 + /// + public static class LinkedListExtension + { + /// + /// 将双向链表中的某个节点移动到链表的结尾处。 + /// + /// 双向链表元素类型 + /// 双向链表 + /// 要移动的节点 + public static void MoveLast(this LinkedList list, LinkedListNode node) => LinkedListUtil.MoveLast(list,node); + + /// + /// 将双向链表中移动到最前方 + /// + /// 双向链表元素类型 + /// 双向链表 + /// 要移动的节点 + public static void MoveFirst(this LinkedList list, LinkedListNode node) => LinkedListUtil.MoveFirst(list,node); + + } +} diff --git a/EasyTool.Core/CollectionsCategory/ListExtension.cs b/EasyTool.Core/CollectionsCategory/ListExtension.cs new file mode 100644 index 0000000..31af6e4 --- /dev/null +++ b/EasyTool.Core/CollectionsCategory/ListExtension.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace EasyTool.Extension +{ + public static class ListExtension + { + /// + /// 判断两个列表是否相等。 + /// + /// 列表元素类型 + /// 要比较的第一个列表 + /// 要比较的第二个列表 + /// 如果两个列表相等,则返回 true;否则返回 false + public static bool Equals(this List list1, List list2)=> ListUtil.Equals(list1, list2); + } +} diff --git a/EasyTool.Core/CollectionsCategory/QueueExtension.cs b/EasyTool.Core/CollectionsCategory/QueueExtension.cs new file mode 100644 index 0000000..4f8dfc0 --- /dev/null +++ b/EasyTool.Core/CollectionsCategory/QueueExtension.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; + +namespace EasyTool.Extension +{ + /// + /// 队列工具类 + /// + public static class QueueExtension + { + + /// + /// 将指定集合中的元素添加到队列的末尾。 + /// + /// 队列元素类型 + /// 队列 + /// 要添加到队列中的集合 + public static void EnqueueRange(this Queue queue, IEnumerable collection) => QueueUtil.EnqueueRange(queue, collection); + + /// + /// 从队列中移除指定元素的第一个匹配项。 + /// + /// 队列元素类型 + /// 队列 + /// 要移除的元素 + /// 如果已成功移除元素,则为 true;否则为 false。 + public static bool Remove(this Queue queue, T item) => QueueUtil.Remove(queue, item); + + } +} diff --git a/EasyTool.Core/CollectionsCategory/StackExtension.cs b/EasyTool.Core/CollectionsCategory/StackExtension.cs new file mode 100644 index 0000000..a1477f9 --- /dev/null +++ b/EasyTool.Core/CollectionsCategory/StackExtension.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace EasyTool.CollectionsCategory +{ + public static class StackExtension + { + /// + /// 从堆栈中移除指定元素的第一个匹配项。 + /// + /// 堆栈元素类型 + /// 堆栈 + /// 要移除的元素 + /// 如果已成功移除元素,则为 true;否则为 false。 + public static bool Remove(this Stack stack, T item)=> StackUtil.Remove(stack, item); + } +} From bd549d3e94b9573950378e9eb858ceeade20890b Mon Sep 17 00:00:00 2001 From: TimChen Date: Fri, 8 Sep 2023 20:36:01 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DateTimeCategory/DateTimeExtension.cs | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 EasyTool.Core/DateTimeCategory/DateTimeExtension.cs diff --git a/EasyTool.Core/DateTimeCategory/DateTimeExtension.cs b/EasyTool.Core/DateTimeCategory/DateTimeExtension.cs new file mode 100644 index 0000000..2b7f32f --- /dev/null +++ b/EasyTool.Core/DateTimeCategory/DateTimeExtension.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; + +namespace EasyTool.Extension +{ + /// + /// 提供各种日期操作和计算的工具类。 + /// + public static class DateTimeExtension + { + /// + /// 获取指定日期所在周的第一天的日期。 + /// + /// 指定日期。 + /// 指定日期所在周的第一天的日期。 + public static DateTime GetFirstDayOfWeek(this DateTime date) => DateTimeUtil.GetFirstDayOfWeek(date); + + /// + /// 获取指定日期所在月份的第一天的日期。 + /// + /// 指定日期。 + /// 指定日期所在月份的第一天的日期。 + public static DateTime GetFirstDayOfMonth(this DateTime date) => DateTimeUtil.GetFirstDayOfMonth(date); + + + /// + /// 获取指定日期所在季度的第一天的日期。 + /// + /// 指定日期。 + /// 指定日期所在季度的第一天的日期。 + public static DateTime GetFirstDayOfQuarter(this DateTime date) => DateTimeUtil.GetFirstDayOfQuarter(date); + + /// + /// 获取指定日期所在年份的第一天的日期。 + /// + /// 指定日期。 + /// 指定日期所在年份的第一天的日期。 + public static DateTime GetFirstDayOfYear(this DateTime date) => DateTimeUtil.GetFirstDayOfYear(date); + + /// + /// 计算指定日期和当前日期之间的天数差。 + /// + /// 指定日期。 + /// 指定日期和当前日期之间的天数差。 + public static int GetDaysBetween(this DateTime date) => DateTimeUtil.GetDaysBetween(date); + + /// + /// 计算两个日期之间的天数差。 + /// + /// 第一个日期。 + /// 第二个日期。 + /// 两个日期之间的天数差。 + public static int GetDaysBetween(this DateTime date1, DateTime date2) => DateTimeUtil.GetDaysBetween(date1, date2); + + /// + /// 计算指定日期和当前日期之间的工作日数差。 + /// + /// 指定日期。 + /// 指定日期和当前日期之间的工作日数差。 + public static int GetWorkDaysBetween(this DateTime date) => DateTimeUtil.GetWorkDaysBetween(date); + + /// + /// 计算两个日期之间的工作日数差。 + /// + /// 第一个日期。 + /// 第二个日期。 + /// 两个日期之间的工作日数差。 + public static int GetWorkDaysBetween(this DateTime date1, DateTime date2) => DateTimeUtil.GetWorkDaysBetween(date1, date2); + + /// + /// 判断指定日期是否是工作日。 + /// + /// 指定日期。 + /// 如果是工作日,则返回 true;否则返回 false。 + public static bool IsWorkDay(this DateTime date) => DateTimeUtil.IsWorkDay(date); + + /// + /// 获取指定日期所在周的所有日期。 + /// + /// 指定日期。 + /// 指定日期所在周的所有日期。 + public static List GetWeekDays(this DateTime date) => DateTimeUtil.GetWeekDays(date); + + /// + /// 获取指定日期所在月份的所有日期。 + /// + /// 指定日期。 + /// 指定日期所在月份的所有日期。 + public static List GetMonthDays(this DateTime date) => DateTimeUtil.GetMonthDays(date); + + /// + /// 获取指定日期所在季度的所有日期。 + /// + /// 指定日期。 + /// 指定日期所在季度的所有日期。 + public static List GetQuarterDays(this DateTime date) => DateTimeUtil.GetQuarterDays(date); + + /// + /// 获取指定日期所在年份的所有日期。 + /// + /// 指定日期。 + /// 指定日期所在年份的所有日期。 + public static List GetYearDays(this DateTime date) => DateTimeUtil.GetYearDays(date); + } +}