C#在使用 Parallel.ForEach 并发编程时遇到的问题及解决方案
摘要:最近在项目中,需要将List A循环处理数据,然后将处理好的数据加入的List B中。 使用Parallel.ForEach并发处理List A时,处理好的List B中数据总是存在丢失。 通过排查直接使用ListA.ForEach,List B中数据不会丢失。 后面想到List类型是线程不安全的,
阅读全文
Parallel.ForEach
摘要:在C#中,Parallel.ForEach是一个并行循环构造,它允许你并行地执行对集合中每个元素的操作。使用Parallel.ForEach时,你可以在循环体内使用递归或循环,但是需要注意以下几点: 线程安全:确保你的递归或循环内部的代码是线程安全的。如果你的代码访问共享资源,你需要确保适当的同步机
阅读全文
使用Stopwatch调试程序的性能
摘要:Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); DoSomething(); stopWatch.Stop(); Console.WriteLine("耗时时间(毫秒):" + stopWatch.Elapsed.TotalMill
阅读全文
导出Excel时,通过自定义Attribute设置表头
摘要:var shipmentColumnNames = new List<string>(); var shipmentColumnNames = new List<string>(); var shipmentPropNames = new List<string>();var props = typ
阅读全文
C#可空类型反射赋值
摘要:p.SetValue(result, p.PropertyType.Name.Contains("Nullable") ? Convert.ChangeType(cell.GetValue<object>(), Nullable.GetUnderlyingType(p.PropertyType))
阅读全文
C#如何以“引用”传递对象的属性
摘要:record Person { public int Age; public int Height { get; set; } } 一、声明一个Person类,它有一个字段Age和一个属性Height. 二、针对字段,我们可以通过ref传递引用 代码如下 static void ModifyValu
阅读全文
C#扩展方法
摘要:定义 扩展方法 - C# 编程指南 - C# | Microsoft Learn 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种静态方法,但可以像扩展类型上的实例方法一样进行调用。 对于用 C#、F# 和 Visual Basic
阅读全文
C#中var是强类型还是弱类型?
摘要:一、什么是弱类型? 变量可以被赋予(被重新赋予)任何类型的值。 如JavaScript中 let foo = 42; // foo 现在是一个数值 foo = "bar"; // foo 现在是一个字符串 foo = true; // foo 现在是一个布尔值 二、C#中的var可以被重新赋予任何类
阅读全文
显示类型转换和as的区别
摘要:一、显示类型转换: Dictionary<string,object> dict = new Dictionary<string,object>(); dict.Add("Id", "111"); dict.Add("Name", "NAMSDJFIDSJF"); dict.Add("Genger"
阅读全文