记录C#知识点(二)21-40

news2024/9/22 1:29:59

目录

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<string, object> property = new Dictionary<string, object>();
            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<dynamic> List = new List<dynamic>();
            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 MyRegion
        public static T DeepCopyWithReflection<T>(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.修改代码

 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

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

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

 

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

 

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

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

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

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

2. 增加app.manifest文件

 

3.修改代码

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

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/759526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java设计模式之行为型-访问者模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 一、基础概念 访问者模式是一种对象行为型设计模式&#xff0c;它能够在不修改已有对象结构的前提下&#xff0c;为对象结构中的每个对象提供新的操作。 访问者模式的主要作用是把对元素对象的操作抽…

进程通信与信号

1.管道 匿名管道&#xff1a;匿名管道用于进程间通信&#xff0c;且仅限于本地父子进程之间的通信 管道符号 | 进程间通信的本质就是&#xff0c;让不同的进程看到同一份资源&#xff0c;使用匿名管道实现父子进程间通信的原理就是&#xff0c;让两个父子进程先看到同一份被打…

【云原生】Docker跨主机网络Overlay与Macvlan的区别

跨主机网络通信解决方案 docker原生的overlay和macvlan 第三方的flannel&#xff0c;weave&#xff0c;calico 1.overlay网络 在Docker中&#xff0c;Overlay网络是一种容器网络驱动程序&#xff0c;它允许在多个Docker主机上创建一个虚拟网络&#xff0c;使得容器可以通过这…

Python 最优传输工具箱(Python Optimal Transport)

最近在研究最优传输的相关理论&#xff0c;博主使用的是python编程语言&#xff0c;在这里给大家推荐一个Python最优传输工具箱&#xff1a;Python Optimal Transport&#xff08;pot)与geomloss 其中geomloss是针对pytorch张量的&#xff0c;ot是针对numpy数组的&#xff1b;g…

装饰器模式揭秘:我用装饰器给手机集成了ChatGPT

在平时的开发过程中&#xff0c;我们经常会遇到需要给一个类增加额外功能的需求&#xff0c;但又不想破坏类的原有结构。这时候&#xff0c;装饰器模式就能大显神威了&#xff01;接下来&#xff0c;我将带你深入了解装饰器模式的原理、优缺点、适用场景以及如何在实际开发中巧…

无法找到docker.sock

os环境&#xff1a;麒麟v10(申威) 问题描述&#xff1a; systemctl start docker 然后无法使用docker [rootnode2 ~]# systemctl restart docker [rootnode2 ~]# docker ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon r…

4、应用层https27

https协议加密流程&#xff1a;使用ssl加密。 一、HTTPS协议 对HTTP协议进行加密后的一个新的协议。 1、加密概念 单说数据加密过去狭义&#xff0c;更多的是防止数据被监听劫持。 加密包含俩个方面&#xff1a;身份验证&#xff0c;加密传输。 1.1身份验证 验证对端的身…

四、传播

文章目录 1、草药迷阵问题2、时序回溯搜索3、传播搜索THE END 1、草药迷阵问题 \qquad 有一个10*10的百草药柜&#xff0c;每一个抽屉里都有5种不同属性的草药&#xff0c;依次打开抽屉来长出草药迷阵&#xff0c;要求寻找一种神奇的药方&#xff0c;满足&#xff1a; 横行&am…

数据结构——C++无锁队列

数据结构——C无锁队列 贺志国 2023.7.11 上一篇博客给出了最简单的C数据结构——堆栈的几种无锁实现方法。队列的挑战与栈的有些不同&#xff0c;因为Push()和Pop()函数在队列中操作的不是同一个地方。因此同步的需求就不一样。需要保证对一端的修改是正确的&#xff0c;且对…

(中等)LeetCode 3. 无重复字符到的最长子串 Java

滑动窗口 以示例一为例&#xff0c;找出从每一个字符开始的&#xff0c;不包含重复字符的最长子串&#xff0c;那么&#xff0c;其中最长的那个字符串即为答案。 当我们一次递增地枚举子串的起始位置&#xff0c;会发现子串的结束位置也是递增的&#xff0c;原因在于&#xf…

Django项目创建

Django项目创建 文章目录 Django项目创建&#x1f468;‍&#x1f3eb;方式一&#xff1a;终端命令行方式&#x1f468;‍&#x1f52c;方式二&#xff1a;Pycharm创建 &#x1f468;‍&#x1f3eb;方式一&#xff1a;终端命令行方式 1️⃣cmd打开终端&#xff0c;切换到指定目…

WebSell管理工具--中国蚁剑安装教程以及初始化

简介&#xff1a;中国蚁剑是一款开源的跨平台WebShell网站管理工具 蚁剑的下载安装&#xff1a; GitHub项目地址&#xff1a;https://github.com/AntSwordProject/ Windows下载安装&#xff1a; 百度网盘下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1A5wK…

超细整理,性能测试-性能指标监控命令详细实战,一篇速通

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能监控命令&…

自动驾驶代客泊车AVP摄像头与ECU交互需求规范

目录 1 文档范围及控制方法... 5 1.1 目的.... 5 1.2 文档授权... 5 1.3 文档变更管理... 5 1.4 缩写.... 5 1.5 术语.... 5 2 系统组成... 6 2.1 系统框图... 6 2.2 电源供应和时序要求... 7 2.2.1 摄像头供电控制... 7 2.2.2 摄像头上电时序要求…

论文(3)——使用ChatGPT快速提高科研能力!!如何快速构建代码?怎么提高自己的科研能力?如何提高自己的生产力?

文章目录 引言问题描述问题解决智能开发软件的方法ChatGPT Plus 代码解释器使用ChatGPT插件功能 代码工具Coplit学生优惠免费申请Coplit和pycharm的结合 NewBing的申请 总结参考引用 引言 chatGPT大模型用于问问题和debug&#xff0c;NewBing用于搜索论文&#xff0c;cpolit用…

简述HashMap的扩容机制

注意&#xff1a;本博客需要对HashMap源码有过一定理解&#xff0c;看过源码比较好&#xff0c;仅供互相学习参考 JDK1.7和JDK1.8对比 1.7版本&#xff1a; (1). 首先生成一个新数组(2). 遍历老数组每个位置中的链表元素(3). 取每个元素的key&#xff0c;重新计算每个元素在…

深度学习ai学习方向如何规划,算法竞赛,机器学习,搭建环境等答疑

目录 1了解人工智能的背景知识 2 补充数学或编程知识 3 熟悉机器学习工具库 4 系统的学习人工智能 5 动手去做一些AI应用 1了解人工智能的背景知识 一些虽然存在但是在研究或者工业上不常用的知识&#xff0c;为自己腾出更多的时间来去学习&#xff0c;研究。 人工智能里…

2023.7.16-约数的枚举

功能&#xff1a;输入一个整数&#xff0c;结果打印出这个整数所有的约数。 程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int a0, b;printf("请输入一个整数&#xff1a;");scanf("%d",&a);printf(&qu…

迭代器模式:相比直接遍历集合数据,使用迭代器有哪些优势?

今天&#xff0c;我们学习另外一种行为型设计模式&#xff0c;迭代器模式。它用来遍历集合对象。不过&#xff0c;很多编程语言都将迭代器作为一个基础的类库&#xff0c;直接提供出来了。在平时开发中&#xff0c;特别是业务开发&#xff0c;我们直接使用即可&#xff0c;很少…

前端基础:HTML和CSS简介

目录 1、HTML 简介 &#xff08;1&#xff09;在 HTML 中引入外部 CSS &#xff08;2&#xff09;在 HTML 中引入外部 JavaScript 2、CSS 简介 &#xff08;1&#xff09;CSS 的基本语法 &#xff08;2&#xff09;三种使用 CSS 的方法 2.1 - 外部 CSS 的使用 2.2 - 内…