目录

21.性能优化

22.动态dynamic使用

23.中文乱码

24.启动项目之前,执行文件

25.深拷贝-反射实现

26.丢弃运算符 _

27.winform程序使用管理员运行

28.wpf程序使用管理员运行


21.性能优化

1.检查空字符串:使用string.Empty
2.更改类型转换:使用as
3.字符串比较法:Equals(“abc”)
4.for循环:使用–i比++i效率高
5.继承,能少用就少用,代码简洁了,但是效率低

22.动态dynamic使用

先定义

 public class DynamicInputParams : DynamicObject{Dictionary property = new Dictionary();public override bool TryGetMember(GetMemberBinder binder, out object result){string name = binder.Name;return property.TryGetValue(name, out result);}public override bool TrySetMember(SetMemberBinder binder, object value){property[binder.Name] = value;return true;}}

使用

dynamic P = new DynamicInputParams();P.Name = "张三";P.Age = 22;P.Sex = "女";P.a = "a";Console.WriteLine(P.Name);//也可以添加到List集合List List = new List();List.Add(P);foreach (var item in List){Console.WriteLine(item.Name);}

或者

 dynamic retObject; retObject = new { retcode = "0", retmsg = "成功", data = 1 };

23.中文乱码

AppContext.SetSwitch("Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering", false);Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);string[] strAll = await System.IO.File.ReadAllLinesAsync(filePath, Encoding.GetEncoding("gbk"));

24.启动项目之前,执行文件

1.建立1.bat,demo是要关闭的进程

taskkill /IM demo.exe /F

2.生成前事件命令行,注意目录的路径

powershell.exe -Command "Start-Process '$(SolutionDir)\1.bat' -Verb RunAs"

25.深拷贝-反射实现

还可以使用别的方式实现

// 利用反射实现深拷贝#region MyRegionpublic static T DeepCopyWithReflection(T obj){Type type = obj.GetType();// 如果是字符串或值类型则直接返回if (obj is string || type.IsValueType) return obj;// 如果是数组if (type.IsArray){Type elementType = Type.GetType(type.FullName.Replace("[]", string.Empty));var array = obj as Array;Array copied = Array.CreateInstance(elementType, array.Length);for (int i = 0; i < array.Length; i++){copied.SetValue(DeepCopyWithReflection(array.GetValue(i)), i);}return (T)Convert.ChangeType(copied, obj.GetType());}object retval = Activator.CreateInstance(obj.GetType());PropertyInfo[] properties = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic| BindingFlags.Instance | BindingFlags.Static);foreach (var property in properties){var propertyValue = property.GetValue(obj, null);if (propertyValue == null)continue;property.SetValue(retval, DeepCopyWithReflection(propertyValue), null);}return (T)retval;}#endregion

26.丢弃运算符 _

使用_,编译器不会出现提示警告了

_ = Task.Run(() =>{});

27.winform程序使用管理员运行

1.首先建立一个winform程序

2.增加app.manifest文件

3.修改代码

 

4. 重新生成,查看生成目录

会看到一个带有盾牌的exe,就是已经增加了管理员权限的程序

并且启动的时候,还会要求使用管理员运行vs软件

注意:当计算机登录用户已经是管理员的话,那么exe就不会出现盾牌。即使把生成带有盾牌的exe,复制过去,也不会带有盾牌。

28.wpf程序使用管理员运行

和winform差不多,只是项目的结构不一样

1.使用.net6创建一个wpf程序

2.增加app.manifest文件

3.修改代码

4. 重新生成,查看生成目录

会看到一个带有盾牌的exe,就是已经增加了管理员权限的程序