串串香 發表於 2024-6-4 13:35:00

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&nbsp;static&nbsp;partial&nbsp;class&nbsp;Extensions<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;A&nbsp;Stream&nbsp;extension&nbsp;method&nbsp;that&nbsp;converts&nbsp;the&nbsp;@this&nbsp;to&nbsp;a&nbsp;md&nbsp;5&nbsp;hash.<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name="this"&gt;The&nbsp;@this&nbsp;to&nbsp;act&nbsp;on.&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;returns&gt;@this&nbsp;as&nbsp;a&nbsp;string.&lt;/returns&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;string&nbsp;ToMD5Hash(this&nbsp;Stream&nbsp;@this)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(MD5&nbsp;md5&nbsp;=&nbsp;MD5.Create())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;hashBytes&nbsp;=&nbsp;md5.ComputeHash(@this);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;sb&nbsp;=&nbsp;new&nbsp;StringBuilder();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(byte&nbsp;bytes&nbsp;in&nbsp;hashBytes)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(bytes.ToString("X2"));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sb.ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></code></pre>
<h3 data-tool="mdnice编辑器">解压GZip字节数组</h3>
<pre data-tool="mdnice编辑器"><code>public&nbsp;static&nbsp;partial&nbsp;class&nbsp;Extensions<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;A&nbsp;byte[]&nbsp;extension&nbsp;method&nbsp;that&nbsp;decompress&nbsp;the&nbsp;byte&nbsp;array&nbsp;gzip&nbsp;to&nbsp;string.<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name="this"&gt;The&nbsp;@this&nbsp;to&nbsp;act&nbsp;on.&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;returns&gt;The&nbsp;byte&nbsp;array&nbsp;gzip&nbsp;to&nbsp;string.&lt;/returns&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;string&nbsp;DecompressGZip(this&nbsp;byte[]&nbsp;@this)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;int&nbsp;bufferSize&nbsp;=&nbsp;1024;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(var&nbsp;memoryStream&nbsp;=&nbsp;new&nbsp;MemoryStream(@this))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(var&nbsp;zipStream&nbsp;=&nbsp;new&nbsp;GZipStream(memoryStream,&nbsp;CompressionMode.Decompress))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Memory&nbsp;stream&nbsp;for&nbsp;storing&nbsp;the&nbsp;decompressed&nbsp;bytes<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(var&nbsp;outStream&nbsp;=&nbsp;new&nbsp;MemoryStream())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;buffer&nbsp;=&nbsp;new&nbsp;byte;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;totalBytes&nbsp;=&nbsp;0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;readBytes;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((readBytes&nbsp;=&nbsp;zipStream.Read(buffer,&nbsp;0,&nbsp;bufferSize))&nbsp;&gt;&nbsp;0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outStream.Write(buffer,&nbsp;0,&nbsp;readBytes);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;totalBytes&nbsp;+=&nbsp;readBytes;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Encoding.Default.GetString(outStream.GetBuffer(),&nbsp;0,&nbsp;totalBytes);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;A&nbsp;byte[]&nbsp;extension&nbsp;method&nbsp;that&nbsp;decompress&nbsp;the&nbsp;byte&nbsp;array&nbsp;gzip&nbsp;to&nbsp;string.<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name="this"&gt;The&nbsp;@this&nbsp;to&nbsp;act&nbsp;on.&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name="encoding"&gt;The&nbsp;encoding.&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;returns&gt;The&nbsp;byte&nbsp;array&nbsp;gzip&nbsp;to&nbsp;string.&lt;/returns&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;string&nbsp;DecompressGZip(this&nbsp;byte[]&nbsp;@this,&nbsp;Encoding&nbsp;encoding)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;int&nbsp;bufferSize&nbsp;=&nbsp;1024;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(var&nbsp;memoryStream&nbsp;=&nbsp;new&nbsp;MemoryStream(@this))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(var&nbsp;zipStream&nbsp;=&nbsp;new&nbsp;GZipStream(memoryStream,&nbsp;CompressionMode.Decompress))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Memory&nbsp;stream&nbsp;for&nbsp;storing&nbsp;the&nbsp;decompressed&nbsp;bytes<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(var&nbsp;outStream&nbsp;=&nbsp;new&nbsp;MemoryStream())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;buffer&nbsp;=&nbsp;new&nbsp;byte;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;totalBytes&nbsp;=&nbsp;0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;readBytes;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((readBytes&nbsp;=&nbsp;zipStream.Read(buffer,&nbsp;0,&nbsp;bufferSize))&nbsp;&gt;&nbsp;0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outStream.Write(buffer,&nbsp;0,&nbsp;readBytes);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;totalBytes&nbsp;+=&nbsp;readBytes;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;encoding.GetString(outStream.GetBuffer(),&nbsp;0,&nbsp;totalBytes);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></code></pre>
<h3 data-tool="mdnice编辑器">将泛型数组转换为DataTable</h3>
<pre data-tool="mdnice编辑器"><code>public&nbsp;static&nbsp;partial&nbsp;class&nbsp;Extensions<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;A&nbsp;T[]&nbsp;extension&nbsp;method&nbsp;that&nbsp;converts&nbsp;the&nbsp;@this&nbsp;to&nbsp;a&nbsp;data&nbsp;table.<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;typeparam&nbsp;name="T"&gt;Generic&nbsp;type&nbsp;parameter.&lt;/typeparam&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name="this"&gt;The&nbsp;@this&nbsp;to&nbsp;act&nbsp;on.&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;returns&gt;@this&nbsp;as&nbsp;a&nbsp;DataTable.&lt;/returns&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;DataTable&nbsp;ToDataTable&lt;T&gt;(this&nbsp;T[]&nbsp;@this)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type&nbsp;type&nbsp;=&nbsp;typeof&nbsp;(T);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PropertyInfo[]&nbsp;properties&nbsp;=&nbsp;type.GetProperties(BindingFlags.Public&nbsp;|&nbsp;BindingFlags.Instance);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FieldInfo[]&nbsp;fields&nbsp;=&nbsp;type.GetFields(BindingFlags.Public&nbsp;|&nbsp;BindingFlags.Instance);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;dt&nbsp;=&nbsp;new&nbsp;DataTable();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(PropertyInfo&nbsp;property&nbsp;in&nbsp;properties)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt.Columns.Add(property.Name,&nbsp;property.PropertyType);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(FieldInfo&nbsp;field&nbsp;in&nbsp;fields)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt.Columns.Add(field.Name,&nbsp;field.FieldType);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(T&nbsp;item&nbsp;in&nbsp;@this)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataRow&nbsp;dr&nbsp;=&nbsp;dt.NewRow();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(PropertyInfo&nbsp;property&nbsp;in&nbsp;properties)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dr&nbsp;=&nbsp;property.GetValue(item,&nbsp;null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(FieldInfo&nbsp;field&nbsp;in&nbsp;fields)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dr&nbsp;=&nbsp;field.GetValue(item);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt.Rows.Add(dr);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;dt;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<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;'>
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如果该篇文章对您有帮助的话,可以点一下右下角的【&hearts;推荐&hearts;】,希望能够持续的为大家带来好的技术文章,文中可能存在描述不正确的地方,欢迎指正或补充,不胜感激。
</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/Can-daydayup/p/18230586
頁: [1]
查看完整版本: C#开源实用的工具类库,集成超过1000多种扩展方法