C#开源实用的工具类库,集成超过1000多种扩展方法
<h2 data-tool="mdnice编辑器">前言</h2><p data-tool="mdnice编辑器">今天大姚给大家分享一个C#开源(MIT License)、免费、实用且强大的工具类库,集成超过1000多种扩展方法增强 .NET Framework 和 .NET Core的使用效率:Z.ExtensionMethods。</p>
<h2 data-tool="mdnice编辑器">直接项目引入类库使用</h2>
<p data-tool="mdnice编辑器">在你的对应项目中NuGet包管理器中搜索:<code>Z.ExtensionMethods</code>安装即可使用。</p>
<blockquote data-tool="mdnice编辑器">
<p>支持.NET Standard 2.0和.NET Framework 4.0 。</p>
</blockquote>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202406/1336199-20240604133126205-1692348669.png" alt="" loading="lazy"></p>
<h2 data-tool="mdnice编辑器">项目源代码</h2>
<div>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202406/1336199-20240604133147577-1010658337.png" alt="" loading="lazy"></p>
<h2 data-tool="mdnice编辑器">部分扩展方法展示</h2>
<h3 data-tool="mdnice编辑器">MD5哈希算法</h3>
<pre data-tool="mdnice编辑器"><code>public static partial class Extensions<br>{<br> /// <summary><br> /// A Stream extension method that converts the @this to a md 5 hash.<br> /// </summary><br> /// <param name="this">The @this to act on.</param><br> /// <returns>@this as a string.</returns><br> public static string ToMD5Hash(this Stream @this)<br> {<br> using (MD5 md5 = MD5.Create())<br> {<br> byte[] hashBytes = md5.ComputeHash(@this);<br> var sb = new StringBuilder();<br> foreach (byte bytes in hashBytes)<br> {<br> sb.Append(bytes.ToString("X2"));<br> }<br><br> return sb.ToString();<br> }<br> }<br>}<br></code></pre>
<h3 data-tool="mdnice编辑器">解压GZip字节数组</h3>
<pre data-tool="mdnice编辑器"><code>public static partial class Extensions<br>{<br> /// <summary><br> /// A byte[] extension method that decompress the byte array gzip to string.<br> /// </summary><br> /// <param name="this">The @this to act on.</param><br> /// <returns>The byte array gzip to string.</returns><br> public static string DecompressGZip(this byte[] @this)<br> {<br> const int bufferSize = 1024;<br> using (var memoryStream = new MemoryStream(@this))<br> {<br> using (var zipStream = new GZipStream(memoryStream, CompressionMode.Decompress))<br> {<br> // Memory stream for storing the decompressed bytes<br> using (var outStream = new MemoryStream())<br> {<br> var buffer = new byte;<br> int totalBytes = 0;<br> int readBytes;<br> while ((readBytes = zipStream.Read(buffer, 0, bufferSize)) > 0)<br> {<br> outStream.Write(buffer, 0, readBytes);<br> totalBytes += readBytes;<br> }<br> return Encoding.Default.GetString(outStream.GetBuffer(), 0, totalBytes);<br> }<br> }<br> }<br> }<br><br> /// <summary><br> /// A byte[] extension method that decompress the byte array gzip to string.<br> /// </summary><br> /// <param name="this">The @this to act on.</param><br> /// <param name="encoding">The encoding.</param><br> /// <returns>The byte array gzip to string.</returns><br> public static string DecompressGZip(this byte[] @this, Encoding encoding)<br> {<br> const int bufferSize = 1024;<br> using (var memoryStream = new MemoryStream(@this))<br> {<br> using (var zipStream = new GZipStream(memoryStream, CompressionMode.Decompress))<br> {<br> // Memory stream for storing the decompressed bytes<br> using (var outStream = new MemoryStream())<br> {<br> var buffer = new byte;<br> int totalBytes = 0;<br> int readBytes;<br> while ((readBytes = zipStream.Read(buffer, 0, bufferSize)) > 0)<br> {<br> outStream.Write(buffer, 0, readBytes);<br> totalBytes += readBytes;<br> }<br> return encoding.GetString(outStream.GetBuffer(), 0, totalBytes);<br> }<br> }<br> }<br> }<br>}<br></code></pre>
<h3 data-tool="mdnice编辑器">将泛型数组转换为DataTable</h3>
<pre data-tool="mdnice编辑器"><code>public static partial class Extensions<br>{<br> /// <summary><br> /// A T[] extension method that converts the @this to a data table.<br> /// </summary><br> /// <typeparam name="T">Generic type parameter.</typeparam><br> /// <param name="this">The @this to act on.</param><br> /// <returns>@this as a DataTable.</returns><br> public static DataTable ToDataTable<T>(this T[] @this)<br> {<br> Type type = typeof (T);<br><br> PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);<br> FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance);<br><br> var dt = new DataTable();<br><br> foreach (PropertyInfo property in properties)<br> {<br> dt.Columns.Add(property.Name, property.PropertyType);<br> }<br><br> foreach (FieldInfo field in fields)<br> {<br> dt.Columns.Add(field.Name, field.FieldType);<br> }<br><br> foreach (T item in @this)<br> {<br> DataRow dr = dt.NewRow();<br><br> foreach (PropertyInfo property in properties)<br> {<br> dr = property.GetValue(item, null);<br> }<br><br> foreach (FieldInfo field in fields)<br> {<br> dr = field.GetValue(item);<br> }<br><br> dt.Rows.Add(dr);<br> }<br><br> return dt;<br> }<br>}<br></code></pre>
<h2 data-tool="mdnice编辑器">支持在线搜索和演示</h2>
<blockquote data-tool="mdnice编辑器">
<p>在线地址:<span style="color: rgba(0, 0, 255, 1)"><span style="color: rgba(0, 0, 255, 1)">https://csharp-extension.com/en/online-example/</span></span></p>
</blockquote>
</div>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202406/1336199-20240604133220192-1771910320.png" alt="" loading="lazy"></p>
<p><strong>搜索ToMD5Hash:</strong></p>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202406/1336199-20240604133236455-1860522385.png" alt="" loading="lazy"></p>
<p><strong>使用.NET Fiddle在线演示:</strong></p>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202406/1336199-20240604133254416-1460765275.png" alt="" loading="lazy"></p>
<h2 data-tool="mdnice编辑器">项目源码地址</h2>
<p data-tool="mdnice编辑器">更多项目实用功能和特性欢迎前往项目开源地址查看👀,别忘了给项目一个Star支持💖。</p>
<ul class="list-paddingleft-1" data-tool="mdnice编辑器">
<li>GitHub开源地址:<span style="color: rgba(0, 0, 255, 1)"><span style="color: rgba(0, 0, 255, 1)">https://github.com/zzzprojects/Z.ExtensionMethods</span></span></li>
<li>在线搜索和演示地址:<span style="color: rgba(0, 0, 255, 1)"><span style="color: rgba(0, 0, 255, 1)">https://csharp-extension.com/en/online-example/</span></span></li>
</ul>
<h2 data-tool="mdnice编辑器">优秀项目和框架精选</h2>
<p data-tool="mdnice编辑器">该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。</p>
<ul class="list-paddingleft-1" data-tool="mdnice编辑器">
<li><span style="color: rgba(0, 0, 255, 1)"><span style="color: rgba(0, 0, 255, 1)">https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md</span></span></li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202406/1336199-20240604133316712-270291544.png" alt="" loading="lazy"></p>
<h2 id="activity-name" class="rich_media_title ">DotNetGuide技术社区交流群</h2>
<ul>
<li>DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。</li>
<li>在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。</li>
<li>我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。</li>
</ul>
<blockquote>
<p><span style="color: rgba(0, 0, 255, 1)"><span style="color: rgba(0, 0, 255, 1)"><strong>欢迎加入DotNetGuide技术社区微信交流群👪</strong></span></span></p>
</blockquote>
</div>
<div id="MySignature" role="contentinfo">
<blockquote >
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者名称:</span>追逐时光者</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者简介:</span>一个热爱编程、善于分享、喜欢学习、探索、尝试新事物和新技术的全栈软件工程师。</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'>
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如果该篇文章对您有帮助的话,可以点一下右下角的【♥推荐♥】,希望能够持续的为大家带来好的技术文章,文中可能存在描述不正确的地方,欢迎指正或补充,不胜感激。
</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/Can-daydayup/p/18230586
頁:
[1]