懒得勤快 преди 1 година
родител
ревизия
3036a9f805

+ 1 - 1
Directory.Build.props

@@ -1,6 +1,6 @@
 <Project>
  <PropertyGroup>
-   <Version>2024.4</Version>
+   <Version>2024.4.1</Version>
    <Deterministic>true</Deterministic>
  </PropertyGroup>
 </Project>

+ 9 - 9
Masuit.Tools.Abstractions/Extensions/BaseType/IDictionaryExtensions.cs

@@ -1110,10 +1110,10 @@ public static class IDictionaryExtensions
     /// <typeparam name="TKey"></typeparam>
     /// <param name="source"></param>
     /// <param name="keySelector">键选择器</param>
-    public static NullableDictionary<TKey, List<TSource>> ToLookupX<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
+    public static LookupX<TKey, TSource> ToLookupX<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
     {
         var items = source as IList<TSource> ?? source.ToList();
-        var dic = new NullableDictionary<TKey, List<TSource>>(items.Count) { FallbackValue = new List<TSource>() };
+        var dic = new Dictionary<TKey, List<TSource>>(items.Count);
         foreach (var item in items)
         {
             var key = keySelector(item);
@@ -1127,7 +1127,7 @@ public static class IDictionaryExtensions
             }
         }
 
-        return dic;
+        return new LookupX<TKey, TSource>(dic);
     }
 
     /// <summary>
@@ -1139,10 +1139,10 @@ public static class IDictionaryExtensions
     /// <param name="source"></param>
     /// <param name="keySelector">键选择器</param>
     /// <param name="elementSelector">值选择器</param>
-    public static NullableDictionary<TKey, List<TElement>> ToLookupX<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector)
+    public static LookupX<TKey, TElement> ToLookupX<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector)
     {
         var items = source as IList<TSource> ?? source.ToList();
-        var dic = new NullableDictionary<TKey, List<TElement>>(items.Count) { FallbackValue = new List<TElement>() };
+        var dic = new Dictionary<TKey, List<TElement>>(items.Count);
         foreach (var item in items)
         {
             var key = keySelector(item);
@@ -1156,7 +1156,7 @@ public static class IDictionaryExtensions
             }
         }
 
-        return dic;
+        return new LookupX<TKey, TElement>(dic);
     }
 
     /// <summary>
@@ -1168,10 +1168,10 @@ public static class IDictionaryExtensions
     /// <param name="source"></param>
     /// <param name="keySelector">键选择器</param>
     /// <param name="elementSelector">值选择器</param>
-    public static async Task<NullableConcurrentDictionary<TKey, List<TElement>>> ToLookupAsync<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, Task<TElement>> elementSelector)
+    public static async Task<LookupX<TKey, TElement>> ToLookupAsync<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, Task<TElement>> elementSelector)
     {
         var items = source as IList<TSource> ?? source.ToList();
-        var dic = new NullableConcurrentDictionary<TKey, List<TElement>>(new List<TElement>());
+        var dic = new ConcurrentDictionary<TKey, List<TElement>>();
         await items.ForeachAsync(async item =>
         {
             var key = keySelector(item);
@@ -1184,7 +1184,7 @@ public static class IDictionaryExtensions
                 dic.TryAdd(key, new List<TElement> { await elementSelector(item) });
             }
         });
-        return dic;
+        return new LookupX<TKey, TElement>(dic);
     }
 
     /// <summary>

+ 1 - 1
Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj

@@ -49,7 +49,7 @@
         <PackageReference Include="AngleSharp" Version="1.1.2" />
         <PackageReference Include="AngleSharp.Css" Version="1.0.0-beta.139" />
         <PackageReference Include="Castle.Core" Version="5.1.1" />
-        <PackageReference Include="DnsClient" Version="1.7.0" />
+        <PackageReference Include="DnsClient" Version="1.8.0" />
         <PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
         <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
         <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />

+ 39 - 0
Masuit.Tools.Abstractions/Systems/LookupX.cs

@@ -0,0 +1,39 @@
+using System.Collections;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+
+namespace Masuit.Tools.Systems;
+
+public class LookupX<TKey, TElement> : IEnumerable<List<TElement>>
+{
+    private readonly IDictionary<TKey, List<TElement>> _dictionary;
+
+    public LookupX(Dictionary<TKey, List<TElement>> dic)
+    {
+        _dictionary = dic;
+    }
+
+    public LookupX(ConcurrentDictionary<TKey, List<TElement>> dic)
+    {
+        _dictionary = dic;
+    }
+
+    public IEnumerator<List<TElement>> GetEnumerator()
+    {
+        return _dictionary.Values.GetEnumerator();
+    }
+
+    IEnumerator IEnumerable.GetEnumerator()
+    {
+        return GetEnumerator();
+    }
+
+    public bool Contains(TKey key)
+    {
+        return _dictionary.ContainsKey(key);
+    }
+
+    public int Count => _dictionary.Count;
+
+    public List<TElement> this[TKey key] => _dictionary.TryGetValue(key, out var value) ? value : new List<TElement>();
+}

+ 0 - 5
Masuit.Tools.Abstractions/Systems/NullableDictionary.cs

@@ -153,11 +153,6 @@ public class NullableDictionary<TKey, TValue> : Dictionary<NullObject<TKey>, TVa
         base.Add(new NullObject<TKey>(key), value);
     }
 
-    public bool Remove(TKey key, out TValue value)
-    {
-        return base.Remove(new NullObject<TKey>(key), out value);
-    }
-
     public bool Remove(TKey key)
     {
         return base.Remove(new NullObject<TKey>(key));

+ 3 - 0
Masuit.Tools.Net45/Masuit.Tools.Net45.csproj

@@ -243,6 +243,9 @@
     <Compile Include="..\Masuit.Tools.Abstractions\Systems\LimitedQueue.cs">
       <Link>Systems\LimitedQueue.cs</Link>
     </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Systems\LookupX.cs">
+      <Link>Systems\LookupX.cs</Link>
+    </Compile>
     <Compile Include="..\Masuit.Tools.Abstractions\Systems\MaskConverter.cs">
       <Link>Systems\MaskConverter.cs</Link>
     </Compile>

+ 1 - 1
Masuit.Tools.Net45/package.nuspec

@@ -2,7 +2,7 @@
 <package>
     <metadata>
         <id>Masuit.Tools.Net45</id>
-        <version>2024.4</version>
+        <version>2024.4.1</version>
         <title>Masuit.Tools</title>
         <authors>懒得勤快</authors>
         <owners>masuit.com</owners>

+ 1 - 1
Masuit.Tools/Masuit.Tools.csproj

@@ -206,7 +206,7 @@
       <Version>5.1.1</Version>
     </PackageReference>
     <PackageReference Include="DnsClient">
-      <Version>1.7.0</Version>
+      <Version>1.8.0</Version>
     </PackageReference>
     <PackageReference Include="HtmlSanitizer">
       <Version>8.0.865</Version>

+ 1 - 1
Masuit.Tools/package.nuspec

@@ -2,7 +2,7 @@
 <package>
     <metadata>
         <id>Masuit.Tools.Net</id>
-        <version>2024.4</version>
+        <version>2024.4.1</version>
         <title>Masuit.Tools</title>
         <authors>懒得勤快</authors>
         <owners>masuit.com</owners>