C#
文章平均质量分 53
Nemo_XP
这个作者很懒,什么都没留下…
展开
-
C#常用的异步写法
启动多个异步线程,等多个线程都结束,才继续往下执行主线程代码。启动一个异步线程,此线程不会影响阻塞主线程运行。原创 2023-02-27 14:29:33 · 431 阅读 · 0 评论 -
LINQ的左连接、右连接、内连接
注:上例中使用了DefaultIfEmpty操作符,它能够为实序列提供一个默认的元素。default关键字对于引用类型将返回null,而对于值类型则返回0。对于结构体类型,则会根据其成员类型将它们相应地初始化为null(引用类型)或0(值类型)说明:新生成的列表list有两个属性info1,info2。其中info1对应的 tableInfos1 表,info2对应的 tableInfos2 表。我们可以不使用default关键字,但在要DefaultIfEmpty中给定当空时的默认对象值。原创 2022-12-20 16:59:50 · 3473 阅读 · 0 评论 -
Process.Start() 报错:系统找不到指定文件
今天在工作中遇到调用浏览器打开页面,代码报错:System.ComponentModel.Win32Exception:“系统找不到指定的文件。代码如下:这段代码,若不报错,有着苛刻的条件,如1.安装了chrome后,chrome自动或个人手动把chrome.exe的文件夹路径配置到环境变量Path里。如下:2.安装的chrome可能在System32文件夹内产生Chrome.exe这也就是,写了这样的代码有的机器能正常调出浏览器,有些则会报错的原因。经过多次尝试,我们使用Win+R运行Chro原创 2022-12-05 17:55:54 · 4500 阅读 · 0 评论 -
线程间操作无效: 从不是创建控件的线程访问它。
private void button1_Click(object sender, EventArgs e) { //报错:从不是创建控件的线程访问它 Thread t = new Thread(() => { for (int i = 0; i < 100; i++) { this.label1.Text原创 2022-03-21 16:24:17 · 6377 阅读 · 0 评论 -
C#委托和事件框架封装简写 delegate、event、Action、EventHandler
曾经.Net大佬只有一个Delegete(委托),别人想用委托的时候,必须得用delegate关键字来定义一个委托,就像这样//定义一个无返回值的,带一个int参数的委托public delegate void myDelegate(int num);话说,委托生来是为了将方法也作为参数进行传递的。所以后来它学会了发布者/订阅者模式。比如:public myDelegate m_delegate;m_delegate += MyFun;public void MyFun(int num){ D原创 2022-03-18 20:13:15 · 1873 阅读 · 0 评论 -
正则表达式包含某字符串且不包含某些字符串
相对的包含某个单词(?=abcd)不包含某个单词,比如hello(?!abcd)不包含某些字符的正则如下 var $sz = /[#$@/\()<>{}[] ]/gi;//常见的特殊字符不够[]里面继续加不包含某些字符串的正则如下 ^((?!666|zzz|abc).)*$;//字符串按照要求换接着需要把上面的多个正则合并到一个如何合并多个正则可以用零宽断言来实现。例如:合并下列正则表达式:A. 必须包含数字的正则表达式 .\dB. 必须包含英文的正则表达式原创 2022-01-11 11:00:38 · 12050 阅读 · 0 评论 -
如何查看dll是32位还是64位
首先,我们在开始菜单的应用列表中找到Visual Studio的文件夹,打开其中的VS开发人员命令提示符。通过VS命令提示符中的CorFlags命令可以查看.NET版的dll的位数,查询命令是:corflags+dll的路径。在查询结果中如果32BITREQ的值为0表示dll是64位,1表示dll是32位。通过VS命令提示符中的dumpbin命令可以查看.net和非.net的dll的位数,查询命令是:dumpbin /headers C:\Temp\Oracle.DataAccess.dll。在查询结原创 2021-11-17 16:06:51 · 7623 阅读 · 0 评论 -
常用正则表达式总结
一到两位数字:可匹配0-99(不考虑首数字为0)^\d{1,2}$ 一到两位的正整数:可匹配1-99(考虑排除首数字为0)^(([1-9][0-9])|[1-9])$ 汉字(0到无数个汉字)^[\u4e00-\u9fa5]*$身份证号(包含15和18位)^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9]原创 2021-08-24 10:01:02 · 2907 阅读 · 0 评论 -
线程简单入门
操作系统Windows资源有1.内存,2.CPU,3.存储硬盘,4,带宽.操作系统在分配资源的最小单位是进程。粗略的说,一个应用程序exe,就是一个进程,如qq,vs,爱奇艺等。每个进程所分配的资源都是相互独立的,不能相互调用。所以进程,是windows系统的一个基本概念,它包含着一个运行程序所需要的的资源,进程之间是相互独立的,一个进程无法直接访问另一个进程的数据(除非利用分布式计算方式),一个进程运行失败也不会影响其他进程的运行,windows系统就是利用进程把工作划分为多个独立的区域,进程可以理解原创 2021-05-19 18:36:19 · 225 阅读 · 0 评论 -
泛型委托的使用
用一个加法计算小实例来演示。首先写一个加法的代码class Program { static void Main(string[] args) { int sum = Add1(6, 3); } public static int Add1(int n1, int n2) { return n1 + n2; } }使用委托来实现names原创 2021-05-18 20:15:58 · 875 阅读 · 0 评论 -
Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常
项目中WCFsConsoleHost服务宿主报"Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常"错误,如图发现同事的电脑上正常运行无问题,详细对比一下区别后,才发现我的电脑设置服务生成路径为bin下会报此问题,而设置服务生成到服务专用目录并无此问题。逐步对比文件才发现bin和服务专用目录缺少OraOps11w.dll文件。得出结论:1.服务宿主项目或服务业务层项目引用Oracle.DataAccess的32位或者64位是否与项目版本一原创 2021-05-18 12:27:56 · 6995 阅读 · 1 评论 -
线程堆栈(Thread Stack)和托管堆(Managed Heap)
内存格局通常分为四个区全局数据区:存放全局变量,静态数据,常量代码区:存放所有的程序代码栈区:存放为运行而分配的局部变量,参数,返回数据,返回地址等,堆区:即自由存储区值类型变量与引用类型变量的内存分配模型也不一样。为了理解清楚这个问题,首先必须区分两种不同类型的内存区域:线程堆栈(Thread Stack)和托管堆(Managed Heap)。每个正在运行的程序都对应着一个进程(process),在一个进程内部,可以有一个或多个线程(thread),每个线程都拥有一块“自留地”,称为“线程堆栈原创 2021-05-14 18:37:09 · 2446 阅读 · 1 评论 -
值类型和引用类型原理
如果有不理解的地方,可以先看之前的两篇基础C# 变量入门趣谈C#方法传参原理(内存地址原理剖析)值类型和引用类型值类型和引用类型有什么根本的区别?值类型以结构类型为例在程序运行到断点的时候,所有的值类型已经分配好地址了(调试的时候会发现)。这里要注重说一下,线程栈为内存空间,值类型都是存在内存空间的,如上图结构MyPoint的两个值类型字段,存在内存中,他们的门牌号(地址)可能是p1是0x00b3ed5c,p1.x同样是0x00b3ed5c,p1.y是0x00b3ed5c+偏移量为0x0原创 2021-05-14 18:36:09 · 744 阅读 · 5 评论 -
C#方法传参原理(内存地址原理剖析)
C#方法里的参数,在使用的时候传参有两种1.普通传参2.引用传参ref和out普通传参(值类型)引用传参ref或out引用传参ref和out的区别:ref要求使用前先赋值,方法中随意out要求方法中赋值,调用前随意...原创 2021-05-13 20:21:50 · 1113 阅读 · 0 评论 -
C#面向对象趣谈
某天,作为菜鸟的我坐在一间陌生的小会议室,面试正在进行中。面前的经理大哥很拽的拿着我的简历,不屑的盯着紧张的我。“来,说一下什么是面向对象?”。又是这问题,我都被问过很多次了,也经常查资料,我用中指推了推眼镜,很自信的把前几天从度娘哪里搜到的答案给背了出来:面向对象是一种思考问题的方式,是相对于面向过程的一种不同的思想。面向过程注重的解决问题的过程,而面向对象则是注重解决问题的结果。面试大哥盯着我说,“这说的也太官方了,能不能说的通俗点”。我去,要求还挺高。幸亏我早有准备。我继续答道:通俗的说,面向过原创 2021-05-12 19:38:38 · 123 阅读 · 0 评论 -
排序算法
经典的排序算法冒泡排序static void Main(string[] args) { int tempNum = 0; int[] nums = { 1, 2, 3, 4, 5 }; // 冒泡排序,两两比较,左边小于右边交换位置,否则不变(把最小的放在最后) // 21345;23145;23415;23451; 第一轮:第一个和第二个,第二个和第三个,第三个和第四个,第四个第五个原创 2021-05-11 20:08:07 · 183 阅读 · 0 评论 -
C# 变量入门趣谈
变量是初学一门计算机语言最先接触到的一个概念了。语义很简单,就是会变化的量。可是如何生动形象的理解它呢?我们试想这么一个场景。你是一个男生,和一个男性朋友一起开了一间双人床房间,别问我为啥不是女生,我也不知道。酒店的服务员就给你拿了一张房卡,说你们的房号是A520。这个场景中,我们可以理解为,整个计算机运行的内存是一个大旅馆,每当有一个顾客过来开N个房见的时候(某程序想要申请一块内存来存数据),这个时候作为旅馆服务员的你(程序员),直接去给顾客开了N个房间(程序员通过指令声明一个变量在内存中开辟一块连原创 2021-05-11 14:07:44 · 229 阅读 · 1 评论 -
C#委托和事件入门详解
经典实例:父窗体与子控件的相互调用这里先复习一下父类和继承子类的相互调用.class Program { static void Main(string[] args) { Student student = new Student() { Age = 9, GradeName = "四年级" }; // 子类可直接调用父类非同名成员 student.SayHello();// Show:我原创 2021-05-10 09:42:03 · 720 阅读 · 2 评论 -
SqlSugarClient 要引用ManagedDataAccess.dll,请在Nuget安装最新稳定版本,如果有版本兼容问题请先删除原有引用
遇到的报错,截图如下类似问题报错的,还有其他一些文件如Newtonsoft.Json.dllMySql.Data.dlloracle.ManagedDataAccess.dll等应该是引用的SqlSugar.dll依赖oracle.ManagedDataAccess.dll,而后者与前者配套兼容解决方案:下载sqlsugar源码,复制里面的oracle.ManagedDataAccess.dll文件...原创 2021-03-31 19:35:50 · 1396 阅读 · 0 评论 -
Xxxx.GetTypes()”引发了类型“System.Reflection.ReflectionTypeLoadException”的异常
使用反射创建类的实例的时候发现得到的实例是null, 很奇怪, 监控程序集assembly.GetTypes(), 报错System.Reflection.ReflectionTypeLoadException, 经多次尝试, 查资料得知, 因使用引用的程序集,和被反射的程序集并不在一个文件夹, 并且被引用的程序集有其他相关的引用dll导致的.解决办法:如果被反射的dll没有相关的引用dll, 可以不用管不报错.如果有并未生成到同一文件夹下, 可以方案1.生成到同一文件夹解决.方案2.把被反射的dl原创 2021-02-03 14:02:24 · 1761 阅读 · 0 评论 -
应用程序VS崩溃原因
因原创 2021-01-13 15:13:28 · 1041 阅读 · 0 评论 -
程序集“XX” 中的类型“XX” 的方法“XX()” 没有实现
正常情况问题:子类继承了父类却没有实现父类的这个方法。难查情况问题:有两套项目A,B, 他们生成的位置都在同一个文件夹。 后期改了A项目的这个方法如参数或参数个数, B项目不变. 后来B项目生成就报了此错误。原因,B项目在引用dll的时候引用的其实是A项目生成dll的位置,但是B项目的生成位置却不在这里,所以并没有报B找不到文件,因为B引用的是不属于他用的的文件, 解决方案**:把B项目的生成位置和内项目文件引用此dll的位置调一致即可.**...原创 2020-08-05 16:47:30 · 1651 阅读 · 0 评论 -
List「T」排序需要重新赋值
很喜欢用Linq, linq排序时候 总会忘记重新赋值, 于是重新写个Demo确认注意一下 static void Main(string[] args) { int[] nums = {11,33,22,44,66,55 }; List<int> list = new List<int>() ; list.AddRange(nums); //list.Or原创 2020-07-10 19:52:36 · 415 阅读 · 0 评论 -
关于List「T」的Find,FirstOrDefault等类似方法返回值的空判断
在工作中使用List的Find,FirstOrDefault等方法,曾一度误以为返回值是默认值new T(); 因为下面的解释:可是经过几次报错后,终于想起来T引用类型的默认值其实是Null,值类型是0,所谓的new T()是自己臆想出来的来。那得到的返回值如何判空呢? var entity1 = m_Dispensings.Find(q => q.InpNo == "我是肯定查不到的"); var entity2 = m_Dispensings.FirstOrDefault(q =>原创 2020-07-10 14:27:55 · 2269 阅读 · 0 评论 -
c#各版本与NET版本之间的对应关系
c#各版本与NET版本之间的对应关系C#1.0 1.1–>VS2003–>.NET 1.0 1.1–>委托 事件 属性 AttributeC#2.0–>VS2005–>.NET 2.0–> 匿名委托 泛型 yield 分部类 操作符重载 静态类c#3.0–>VS2008–>.NET 3.5–>linq表达式 集合初始化器 对象初始化器 扩展方法 分部方法 Lambda表达式 自动属性 var 匿名类C#4.0–>VS2010–>.NE原创 2020-07-10 12:29:46 · 915 阅读 · 0 评论 -
年龄周岁计算
关于年龄的精确计算逻辑using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApp3{ public static class CalcAge { public static string GetAgeStringAsBirthday(this DateTime? birthday) {原创 2020-06-10 18:46:48 · 369 阅读 · 0 评论 -
C#中 ??、 ?、 ?: 、?.、?[ ]
可空类型修饰符(?)引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。例如:string str=null; 是正确的,int i=null; 编译器就会报错。为了使值类型也可为空,就可以使用可空类型,即用可空类型修饰符"?“来表示,表现形式为"T?”例如:int? 表示可空的整形,DateTime? 表示可为空的时间。T? 其实是System.Nullable(泛型...原创 2020-02-14 13:29:18 · 367 阅读 · 0 评论 -
反射
https://www.cnblogs.com/wangshenhe/p/3256657.html转载 2019-03-11 16:48:37 · 108 阅读 · 0 评论 -
artTemplate-3.0 html模板使用
http://www.jq22.com/jquery-info1097原创 2019-01-18 15:53:17 · 528 阅读 · 0 评论 -
laypage分页控件的使用
laypage 多功能JavaScript分页组件 v1.3的使用和代码说明&amp;lt;!doctype html&amp;gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt; &amp;lt;meta charset=&quot;utf-8&quot;&amp;gt; &原创 2019-01-18 15:06:03 · 545 阅读 · 0 评论 -
VS生成后事件及相关bat命令解析
https://blog.csdn.net/lk142500/article/details/80736322转载 2019-01-18 14:13:02 · 812 阅读 · 0 评论 -
Datatable和DataView的Select()方法
DataTable是我们在进行开发时经常用到的一个类,并且经常需要对DataTable中的数据进行筛选等操作,下面就介绍一下Datatable中经常用到的一个方法——Select,微软提供了四个函数的重载,分别是 Select()Select(string filterExpression)Select(string filterExpression, string sort)Select(str原创 2018-04-11 09:12:30 · 1755 阅读 · 0 评论 -
批处理中Copy与Xcopy的区别
一,copy不能在有子目录存在的文件中拷贝文件的同时重命名此文件名说明,这里C:为根目录,bat为子目录),而xcopy能,不过会出现提示,当然可以加参数而不使它提示。C:\>copy c:\bat\hai.bat d:\bat\hello.bat提示:系统找不到指定的路径。已复制 0 个文件。可以这样:C:\>copy c:\hai.bat d:\hel...原创 2019-05-20 19:05:40 · 15627 阅读 · 0 评论 -
bat-基本语法
第一章 批处理基础第一节 常用批处理内部命令简介批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD。这些命令统称批处理命令。小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程。了解了大概意思后,我们正式开始学习.先看一个简单的例子!@echo offecho “欢迎来到非常BAT!”pause把上面...原创 2019-05-16 15:16:31 · 34780 阅读 · 2 评论 -
C#引用类型作为参数传值
看例子即可1、private void TestMethod(int i){ i = 1; } public void Main(){ int i = 0; TestMethod(i); // 此时这里的i还是0,因为int是值类型。 }2、class TestClass { public i;} private...原创 2019-05-22 15:49:50 · 889 阅读 · 0 评论 -
bat中rar压缩命令
数据库备份,导出的dmp 文件比较大,需要压缩,压缩后大小能变为原来十分之一左右吧。写的是批处理的语句,每天调用,自动导出dmp 文件,压缩删除原文件。首先写下路径,先将压缩软件的路径写入系统的环境变量里,加入到path中。比如将“C:\Program Files\WinRAR\”加入到path中。之后批处理中写好相应的处理命令:rar a -df %filename%.rar %file...原创 2019-05-17 17:31:19 · 4130 阅读 · 0 评论 -
操作日志表设计
管理系统的操作日志如何做成通用的模块一直是个让我头疼的问题,不过看了博客园里的某篇文章后,现在基本解决了。 在开始做之前,必须把两个日志分清楚,那就是普通操作日志和业务操作日志,这两者有何区别? 在我理解,普通操作日志就是单表的操作记录,而业务操作日志则就是一系列的普通操作日志的集合。 打个比方,用户需要购买一样宝贝,已经到了下单那步,下单就是个业务,这个业务背后就是一系列的业务,...原创 2019-07-25 17:36:16 · 24218 阅读 · 2 评论 -
Log4net用法
Log4net用法日记是我们在程序中经常用到的,故记于此首先要下载Log4net.dll官方网站:http://logging.apache.org/log4net/vs里创建一个c#控制台程序,在App.config里设置这里设置的目的,有两个,一为了得到log4net.config的文件,另一个就是日记的开关,日记是否开启现在看主函数里怎么用using log4net.Conf...原创 2019-07-31 14:36:21 · 503 阅读 · 0 评论 -
C# 关键字 使用where来限定泛型约束
用法如下:public interface IEntity{}public class FutureResult where T : class , IEntity , new(){}使用where来限定T必须是class, 必须是继承自IEntity的类型,而且该类必须有无参构造函数前面两个好理解,new()的意思就是说该类必须有公共的无参构造函数如果我这样写:public...原创 2019-09-27 14:40:10 · 492 阅读 · 0 评论 -
Redis总结
http://www.cnblogs.com/zhangweizhong/p/4969240.html原创 2019-01-03 09:44:27 · 143 阅读 · 0 评论