ilspy

Linq下有一个非常实用的SelectMany方法,很多人却不会用

吃可爱长大的小学妹 提交于 2020-04-15 13:03:50
【推荐阅读】微服务还能火多久?>>> 原文: Linq下有一个非常实用的SelectMany方法,很多人却不会用 在平时开发中经常会看到有些朋友或者同事在写代码时会充斥着各种for,foreach,这种程式代码太多的话阅读性特别差,而且还显得特别累赘,其实在FCL中有很多帮助我们提高阅读感的方法,而现实中很多人不会用或者说不知道,这篇我就跟大家聊一聊。 一:SelectMany 这个方法绝对是提高开发速度的一大利器,有太多的业务场景需要使用这个函数,举一个我实际应用场景,商家按照年份和客户类型预先设置一些标签,然后让系统跑一下它的各自标签到底有多少人? 1. 定义Model 为了方便演示,这里做了一下简化代码,只有一个字典,key表示年份,value:就是该年份的多组标签。 public class EstimateModel { public int ShopID { get; set ; } //key: 年份 public Dictionary< string , List<TagCrowdFilterModel>> YearCrowdFilterDict { get; set ; } } public class TagCrowdFilterModel { /// <summary> /// 筛选条件 /// </summary> public string

为什么要用内插字符串代替string.format

我的未来我决定 提交于 2020-04-12 20:06:00
知道为什么要用内插字符串,只有踩过坑的人才能明白,如果你曾今使用string.format超5个以上占位符,那其中的痛苦我想你肯定是能够共鸣的。 一:痛苦经历 先上一段曾今写过的一段代码,大家来体会一下: LogHelper.WriteLog(string.Format(@"=== Square发送服务中 === 【第四步】 leaflet发送成功。 marketID={0}, marketName={1}, 总共客户:{2}, 成功:{3}人, 失败:{4}人,重复:{5}人, 当前优先级:{6},所属shopID={7}", leafletEntity.MarketingID, leafletEntity.MarketingName, leafletEntity.CustomerList.Count,leafletEntity.SuccessCount, leafletEntity.FailCount, leafletEntity.RepeatCustomerNum, leafletEntity.Priority, leafletEntity.ShopID)); 这里拥有多达8个占位符,当年写这个的时候,会有三个痛点。 1. 占位符不能写错了 比如这里的 {0},{1},{2}.... 不能写成了 {0},{0},{2},造成结果的重复输出。 2. 参数值个数不能多也不能少

为什么要用内插字符串代替string.format

我们两清 提交于 2020-04-12 17:26:46
知道为什么要用内插字符串,只有踩过坑的人才能明白,如果你曾今使用string.format超5个以上占位符,那其中的痛苦我想你肯定是能够共鸣的。 一:痛苦经历 先上一段曾今写过的一段代码,大家来体会一下: LogHelper.WriteLog(string.Format(@"=== Square发送服务中 === 【第四步】 leaflet发送成功。 marketID={0}, marketName={1}, 总共客户:{2}, 成功:{3}人, 失败:{4}人,重复:{5}人, 当前优先级:{6},所属shopID={7}", leafletEntity.MarketingID, leafletEntity.MarketingName, leafletEntity.CustomerList.Count,leafletEntity.SuccessCount, leafletEntity.FailCount, leafletEntity.RepeatCustomerNum, leafletEntity.Priority, leafletEntity.ShopID)); 这里拥有多达8个占位符,当年写这个的时候,会有三个痛点。 1. 占位符不能写错了 比如这里的 {0},{1},{2}.... 不能写成了 {0},{0},{2},造成结果的重复输出。 2. 参数值个数不能多也不能少

为什么要用内插字符串代替string.format

纵然是瞬间 提交于 2020-04-12 13:15:20
知道为什么要用内插字符串,只有踩过坑的人才能明白,如果你曾今使用string.format超5个以上占位符,那其中的痛苦我想你肯定是能够共鸣的。 一:痛苦经历 先上一段曾今写过的一段代码,大家来体会一下: LogHelper.WriteLog(string.Format(@"=== Square发送服务中 === 【第四步】 leaflet发送成功。 marketID={0}, marketName={1}, 总共客户:{2}, 成功:{3}人, 失败:{4}人,重复:{5}人, 当前优先级:{6},所属shopID={7}", leafletEntity.MarketingID, leafletEntity.MarketingName, leafletEntity.CustomerList.Count,leafletEntity.SuccessCount, leafletEntity.FailCount, leafletEntity.RepeatCustomerNum, leafletEntity.Priority, leafletEntity.ShopID)); 这里拥有多达8个占位符,当年写这个的时候,会有三个痛点。 1. 占位符不能写错了 比如这里的 {0},{1},{2}.... 不能写成了 {0},{0},{2},造成结果的重复输出。 2. 参数值个数不能多也不能少

为什么要用内插字符串代替string.format

旧巷老猫 提交于 2020-04-12 12:38:25
知道为什么要用内插字符串,只有踩过坑的人才能明白,如果你曾今使用string.format超5个以上占位符,那其中的痛苦我想你肯定是能够共鸣的。 一:痛苦经历 先上一段曾今写过的一段代码,大家来体会一下: LogHelper.WriteLog(string.Format(@"=== Square发送服务中 === 【第四步】 leaflet发送成功。 marketID={0}, marketName={1}, 总共客户:{2}, 成功:{3}人, 失败:{4}人,重复:{5}人, 当前优先级:{6},所属shopID={7}", leafletEntity.MarketingID, leafletEntity.MarketingName, leafletEntity.CustomerList.Count,leafletEntity.SuccessCount, leafletEntity.FailCount, leafletEntity.RepeatCustomerNum, leafletEntity.Priority, leafletEntity.ShopID)); 这里拥有多达8个占位符,当年写这个的时候,会有三个痛点。 1. 占位符不能写错了 比如这里的 {0},{1},{2}.... 不能写成了 {0},{0},{2},造成结果的重复输出。 2. 参数值个数不能多也不能少

为什么要用内插字符串代替string.format

烂漫一生 提交于 2020-04-12 12:38:07
知道为什么要用内插字符串,只有踩过坑的人才能明白,如果你曾今使用string.format超5个以上占位符,那其中的痛苦我想你肯定是能够共鸣的。 一:痛苦经历 先上一段曾今写过的一段代码,大家来体会一下: LogHelper.WriteLog(string.Format(@"=== Square发送服务中 === 【第四步】 leaflet发送成功。 marketID={0}, marketName={1}, 总共客户:{2}, 成功:{3}人, 失败:{4}人,重复:{5}人, 当前优先级:{6},所属shopID={7}", leafletEntity.MarketingID, leafletEntity.MarketingName, leafletEntity.CustomerList.Count,leafletEntity.SuccessCount, leafletEntity.FailCount, leafletEntity.RepeatCustomerNum, leafletEntity.Priority, leafletEntity.ShopID)); 这里拥有多达8个占位符,当年写这个的时候,会有三个痛点。 1. 占位符不能写错了 比如这里的 {0},{1},{2}.... 不能写成了 {0},{0},{2},造成结果的重复输出。 2. 参数值个数不能多也不能少

如何在C#中为URL建立查询字符串?

可紊 提交于 2020-02-26 15:00:13
从代码调用Web资源时的常见任务是构建查询字符串以包含所有必要的参数。 虽然绝对不是火箭科学,但是您需要处理一些细微的细节,例如,添加 & 如果不是第一个参数),对参数进行编码等。 要做的代码很简单,但是有点乏味: StringBuilder SB = new StringBuilder(); if (NeedsToAddParameter A) { SB.Append("A="); SB.Append(HttpUtility.UrlEncode("TheValueOfA")); } if (NeedsToAddParameter B) { if (SB.Length>0) SB.Append("&"); SB.Append("B="); SB.Append(HttpUtility.UrlEncode("TheValueOfB")); } } 这是一项如此常见的任务,人们期望存在一个实用程序类,该实用程序类将使其更优雅,更易读。 扫描MSDN时,我找不到一个,这使我想到以下问题: 您做上述事情时最优雅的清洁方式是什么? #1楼 受到Roy Tinker的评论的启发,我最终在Uri类上使用了一个简单的扩展方法,该方法使我的代码简洁明了: using System.Web; public static class HttpExtensions { public static Uri

反射器的开源替代品? [关闭]

假装没事ソ 提交于 2020-02-26 08:31:22
只是想知道是否有人知道RedGate的 Reflector的 开源 替代品? 我很想知道一个类似于Reflector的工具是如何工作的。 请注意,如果您知道Reflector的免费但 非 开源替代方案,您可以回答以下相关问题: 比.NET Reflector更好的东西? 摘要 - 2011年5月11日更新 快速汇总已建议的各种开源项目和工具: 通用编译器基础结构 (CCI) 单声道塞西尔 ILSpy dnSpy (ILSpy的分支,项目看起来比原来更活跃) Dotnet IL编辑器(DILE) IL.View Monoflector (截至2011年4月 不再有效 ) 以下资源也可能是有意义的: TypeView.cs Jason Haley关于 拆解.NET 的说明 Adrian Bank 最近的 博客文章 总结了许多Reflector的替代方案,包括下面没有提到的几个选项。 Mark Lichtenberg的详细 博客文章 将几个开源替代品(DILE,ILSpy和使用MonoDevelop的Mono Cecil)与Reflector进行了比较。 #1楼 好吧,Reflector本身是一个.NET程序集,所以你可以在Reflector中打开Reflector.exe来检查它是如何构建的。 #2楼 Reflector工具使用Reflection。 - 显然这是不正确的。

Decompiled HtmlDocument's InvokeScript not working

 ̄綄美尐妖づ 提交于 2020-01-07 01:58:09
问题 Here is the code I got using ILSpy: public static object InvokeScript(this IHTMLDocument2 document, string scriptName, object[] args = null) { object result = null; UnsafeNativeMethods.tagDISPPARAMS tagDISPPARAMS = new UnsafeNativeMethods.tagDISPPARAMS(); tagDISPPARAMS.rgvarg = IntPtr.Zero; try { UnsafeNativeMethods.IDispatch dispatch = ((IHTMLDocument)document).Script as UnsafeNativeMethods.IDispatch; if (dispatch != null) { Guid empty = Guid.Empty; string[] rgszNames = new string[] {

Decompiled assembly - unusual code

邮差的信 提交于 2019-12-20 03:14:06
问题 I decompiled an assembly using ILSpy, and one class in particular got my attention: public class CustomTextStream : NetworkStream { private EventHandler<CustomEventArgs> someEvent; public event EventHandler<CustomEventArgs> SomePublicEvent { add { EventHandler<CustomEventArgs> eventHandler = this.someEvent; EventHandler<CustomEventArgs> eventHandler2; do { eventHandler2 = eventHandler; EventHandler<CustomEventArgs> value2 = (EventHandler<CustomEventArgs>)Delegate.Combine(eventHandler2, value)