![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#
黑夜de骑士
建筑信息化/智慧城市/数字孪生-资深研发
北京建筑设计院-数字化外聘专家
Autodesk开发联盟-行业个人开发代表
多家国企央企设计院-数字化专家
多家建筑信息化创业公司-技术顾问
展开
-
C#之清空FileStream内容
一、背景小伙伴们在使用FileStream读写文件时,是否有清空FileStream的需求呢?二、实现思路using (FileStream stream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { stream.Seek(0, SeekOrigin.Begin); stream.SetLength(0); }三、注原创 2020-07-30 14:29:49 · 3595 阅读 · 0 评论 -
C#之特性CallerMemberName、CallerFilePath、CallerLineNumber的使用
一、背景小伙伴们在看代码时,可能会对CallerMemberName、CallerFilePath、CallerLineNumber产生疑惑,这些是什么,又如何使用呢?二、代码解释CallerMemberName:调用某个方法的主方法名称CallerFilePath:调用某个方法的主方法所在的类文件地址CallerLineNumber:调用这个方法所在的行号大家把这个例子敲一遍就明白了using System;using System.Runtime.CompilerServices;n原创 2020-06-08 20:45:32 · 2009 阅读 · 0 评论 -
epplus之值写不进去解决方案
一、背景今天在C#中使用epplus给excel表格写原创 2020-05-19 13:02:30 · 841 阅读 · 0 评论 -
asp.net之自定义验证属性ValidationAttribute的使用
一、背景小伙伴们在做asp.net开发时,可能需要自定义验证属性,比如asp.net的模型层中,对一个邮箱的属性描述如下,这里使用了默认的[EmailAddress]。[Required][Display(Name = "电子邮件")][EmailAddress]public string Email { get; set; }我们如何使用自己的自定义属性呢?二、实现思路新增一个...原创 2020-04-08 17:41:15 · 1666 阅读 · 0 评论 -
C#之对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性。(DbEntityValidationException 处理方法)
一、背景小伙伴们在做网站登录验证或者EF时,可能会遇到DbEntityValidationException异常,但是并不能清楚知道到底是什么出了问题。二、解决思路1.先引入命名空间using System.Data.Entity.Validation;2.直接通过try catch 来调试DbEntityValidationException的EntityValidationErrors...原创 2020-04-04 12:29:24 · 1606 阅读 · 0 评论 -
深入浅出C#之Thread、ThreadPool、Task、Parallel的联系与区别
一、背景小伙伴在学习C#多线程时,会不会被Thread、ThreadPool、Task、Parallel弄晕了,这里笔者从宏观角度与细节角度来对其联系与区别进行描述二、区别与联系从技术发展的时间线上,微软推出这几个的顺序是:Thread=>ThreadPool=>Task=>ParallelThread优点在于提供了丰富的多线程操作API,缺点在于线程个数的使用不加限...原创 2020-03-22 11:09:14 · 2627 阅读 · 1 评论 -
C#之异步与多线程理解
一、背景小伙伴们在学习C#时,会不会被异步与多线程弄混呢?二、理解相同点:本质的实现基础都是委托异步是简单的一种多线程不同点:异步通常用在简单的后台程序处理异步编程不应该涉及到访问可视化控控件的值、后台线程特定顺序执行、或者访问共享资源除开第二点,于是有了多线程多线程使用需要在Thread 方法里面,而异步直接使用委托即可。多线程跨线程访问UI控件时,会用到Action...原创 2020-01-15 22:09:49 · 731 阅读 · 0 评论 -
C#之Func、Action、Predicate理解
一、背景小伙伴们在开发C#时,会不会被Func,Action,Predicate这三种委托简写弄混呢?他们之间有什么异同呢?二、介绍相同点:本质上,都是委托的简写不同点:Func 有任意返回值Action 无返回值,常用于跨线程的控件访问Predicate 返回判断条件 ,比如list 的FindAll方法,接收一个Predicate条件判断的函数作为参数三、注意事项1.我是...原创 2020-01-13 22:22:28 · 482 阅读 · 0 评论 -
C#之委托、事件、匿名方法、lambda表达式之间的关系
一、背景小伙伴们在学习C#时,会有几个概念的关系不太好理解,委托、事件、匿名方法、lambda表达式他们之间究竟是什么关系呢?二、本质委托是根本事件是为了让委托的使用更加规范与安全匿名方法是为了简化委托的写法lambda表达式进一步简化了匿名方法的写法三、注意事项1.其实很多概念,只要掌握最本质的东西,其他的也就好理解了,其他的无非是语言发展过程中,简化的一些写法而已了。2....原创 2020-01-13 22:16:20 · 383 阅读 · 0 评论 -
C#之.gitignore文件
一、背景小伙伴们在使用git管理自己的C#代码时,.gitignore文件如何写呢?笔者找了一个模板,分享给大家。二、模板首先在git目录下,新建一个 .gitignore.txt 文件,然后把以下代码拷贝进去即可。# Build and Object Folders bin/ obj/ # Nuget packages directory packages/ ...原创 2020-01-09 13:01:55 · 5984 阅读 · 1 评论 -
C#之字符串公式计算
一、背景小伙伴们在C#开发时,如果变量formula是一个字符串公式,但是又想对其进行计算,如何实现呢?这里推荐一种比较好的方法。二、思路可以用.NET自带的DataTable().Compute()方法如下: using System; class Program { static void Main(string[] args) { ...原创 2020-01-09 12:47:54 · 3043 阅读 · 3 评论 -
C#之创建excel
一、背景小伙伴们在用C#操作excel的时候,可能需要通过代码去新建Excel,那么如何实现呢?二、思路1.组件:Epplusepplus组件的安装使用参考在里面搜素Epplus即可2.引用:using System.IO;using OfficeOpenXml;3.代码: class Program { static void Main(string[...原创 2019-12-17 21:32:33 · 3881 阅读 · 5 评论 -
C#之excel新增sheet
一、背景小伙伴们在用C#操作excel的时候,可能有需要新增sheet的需求,那么如何实现呢?二、思路通过Epplus组件提供的ExcelPackage.Workbook.Worksheets.Add的添加方法来实现1.组件:Epplusepplus组件的安装使用参考在里面搜素Epplus即可2.引用:using System.IO;using OfficeOpenXml;3....原创 2019-12-17 21:18:29 · 4319 阅读 · 1 评论 -
C#之double型或者string型保留N位小数点方法(四舍五入)
一、背景小伙伴们在C#开发中,可能需要将double或者数值型的string,转为指定的有效小数位,而且要考虑到四舍五入,如何实现呢?二、思路比如将以下两种类型数据,均保留两位小数。方法:ToString(“0.00”);如果需要保留N位,则小数点后接N个0即可。 class Program { static void Main(string[] args) ...原创 2019-11-28 19:08:07 · 5912 阅读 · 0 评论 -
C#之对象json序列化
一、背景在开发中,如何将C#对象序列化为json字符串呢?二、思路1.组件 Newtonsoft.Json.dll2.引用命名空间 using Newtonsoft.Json;3.方法 JsonConvert.SerializeObject() class Program { static void Main(string[] args) { ...原创 2019-11-21 13:31:00 · 1238 阅读 · 0 评论 -
C#之CodeDom生成只有get set 的属性
一、背景小伙伴们在用原创 2019-11-21 13:23:28 · 480 阅读 · 0 评论 -
C#之自动生成类的方法探究
一、背景最近在写程序时,为了提高实体类的编写效率,想寻找某种方法,能够大量生成某种规则的实体类,通过摸索,找到以下方式,可以通过代码直接生成我们需要的实体类,对于多个实体类,做循环就行了。二、方法主要是利用System.CodeDom下面的方法具体方法大家参考以下几篇文章微软官方CodeDom示例https://docs.microsoft.com/en-us/dotnet/fra...原创 2019-11-15 14:30:14 · 973 阅读 · 0 评论 -
C#之WebBrowser.Navigate地址为中文乱码问题
一、背景小伙伴们在C#中开发时,可能会遇到WebBrowser.Navigate 方法中的参数为string类型的中文地址时,不识别的情况。二、解决思路仔细观察可以发现WebBrowser.Navigate 方法的参数还可以是Uri,经过尝试发现只要将中文字符串转为Uri,然后再传入WebBrowser.Navigate 方法即可。三、注意事项1.关于如何再wpf中显示pdf可以参考博主...原创 2019-10-18 16:39:11 · 1964 阅读 · 0 评论 -
C#中DataTable的可视化
一、背景小伙伴在开发中,通过SqlDataAdapter 向DataTable填入数据后,可能需要看到datatable的全貌,而不是某行或者某列的某个值,那么如何实现呢?二、解决思路其实很简单,只需要在调试时选中DataTable 变量dt,然后在右下角红框处,放大,就可以看到一张完整的DataTable表格了。三、注意事项1.我是黑夜の骑士,欢迎大家关注我的博客,笔者将持续输出BI...原创 2019-10-11 13:06:10 · 3258 阅读 · 0 评论 -
如何使用C#在Excel表格中写入值(Epplus)
一、背景小伙伴们在C#中使用Excel表格时,可能需要将值写入Excel表格中二、思路1.组件:Epplusepplus组件的安装使用参考在里面搜索Epplus即可2.引用:using System.IO;using OfficeOpenXml;3.方法:ExcelPackage.Save();三、代码using System;using System.Collection...原创 2019-05-27 17:17:48 · 3489 阅读 · 2 评论 -
如何使用C#从Excel表格中读取值(Epplus)
一、背景小伙伴们在C#中使用Excel表格时,可能需要将Excel表格中的值读入程序二、思路1.组件:Epplusepplus组件的安装使用参考在里面搜素Epplus即可2.引用:using System.IO;using OfficeOpenXml;3.方法:1.获取值ExcelWorksheet.Cells[1, 1].Value;2.Convert.to 将获取的值转为...原创 2019-05-27 17:23:29 · 8288 阅读 · 0 评论 -
C#获取Excel表格所有sheet名(Epplus)
一、背景小伙伴们在C#中使用Excel表格时,可能需要将去获取Excel所有Sheet名二、思路1.组件:Epplusepplus组件的安装使用参考在里面搜素Epplus即可2.引用:using System.IO;using OfficeOpenXml;3.方法:ExcelWorkBook.Sheets三、代码using System;using System.Coll...原创 2019-05-31 21:27:15 · 5468 阅读 · 0 评论 -
C#之提取字符串中数字(考虑小数)
背景小伙伴们在开发中,可能会遇到通过字符串提取其中数字的需求,这里博主推荐大家使用正则表达式(参考地址)。思路提取整数拿K50+123举例,我们希望得到50123string intNumber= Regex.Replace("K50+123", @"[^0-9]+", "");2.提取小数拿K50+123.01举例,我们希望得到50123.01string doubleNu...原创 2019-06-16 13:07:46 · 5762 阅读 · 0 评论 -
如何在vs中对C#代码进行单元测试
一、背景小伙伴们在使用C#的时候,可能会有单元测试的需要,本文就介绍如何在vs中使用单元测试。二、基本认识2.1什么是单元测试单元测试是对类中方法正确性的测试。针对类中的方法正确性的测试2.2为什么要进行单元测试在我们写代码的时候,很多时候都要去判断一个函数写的是否正确,用单元测试,会很方便的帮助我们实现这个目标。2.3如何进行单元测试请小伙伴们参见本文第三部分三、单元测...原创 2019-06-25 19:34:36 · 9549 阅读 · 4 评论 -
C#中如何判断电脑上的某个文件是否存在
背景小伙伴在使用C#开发的时候,可能需要判断电脑中是存在某个文件代码直接使用File.Exists就行using System.IO;namespace _02FileExist{ class Program { static void Main(string[] args) { //文件地址 ...原创 2019-07-04 13:00:26 · 2545 阅读 · 0 评论 -
C#中泛型类型的比较(运算符==无法用于T和T类型的操作数)
背景小伙伴们在用C#开发程序的时候,可能需要比较泛型类,如果使用==,会发现系统提示这个错误。思路直接使用泛型类的 Equals 方法即可。bool equal=A.Equals(B);该方法实际上就是采用了基类object的Equals方法。注意大家好,我是黑夜の骑士,欢迎大家关注我的博客,笔者将持续输出revit二次开发以及编程干货。...原创 2019-07-04 13:11:30 · 6622 阅读 · 0 评论 -
C#中readonly的理解与使用
一、背景小伙伴们在使用C#开发程序时,可能会遇到readonly关键字,那么它有什么用呢?二、解释通常用在类中属性前面使用了readonly的属性,只能在定义时,或者构造函数中初始化,其他的地方都不能再修改其值三、代码 class Age { //年纪添加了 readonly修饰符 //1.可以在定义时对其赋值 readon...原创 2019-07-04 13:23:44 · 18222 阅读 · 1 评论 -
C#中字符串与枚举值的相互转换
一、背景小伙伴们在使用C#开发程序时,可能会碰到字符串转枚举,或者枚举转字符串的需求。二、思路字符串转枚举 Enum.Parse()枚举转字符串Tostring()三、代码using System;namespace _01EnumerationConvert{ //定义枚举 enum Animal { Cat = 1, ...原创 2019-06-30 10:54:54 · 2042 阅读 · 0 评论 -
如何在wpf或者其他项目中显示控制台
一、背景小伙伴们在开发时,不在控制台项目中,但是又想显示控制台,那么怎么办呢二、思路我们可以在wpf中这样使用using System;using System.Windows;namespace ShowConsoleInWpf{ /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary&g...原创 2019-08-01 21:47:03 · 3078 阅读 · 1 评论 -
C#之控制台设置背景颜色
一、背景小伙伴们在开发时,可能需要设置控制台的背景颜色,那么如何做到二、思路//直接使用如下代码即可 Console.BackgroundColor = ConsoleColor.xx颜色;三、注意事项大家好,我是黑夜の骑士,欢迎大家关注我的博客,笔者将持续输出revit二次开发以及编程干货...原创 2019-08-01 21:55:19 · 2430 阅读 · 0 评论 -
C#之修改控制台字体颜色
一、背景小伙伴们在开发时,可能需要修改控制台的字体或者背景颜色,那么如何实现呢?二、思路大家首先通过Nuget安装Colorful.Console,然后按照下面网址中的说明使用就行了https://github.com/tomakita/Colorful.Console三、注意事项1.不仅可以修改字体颜色,背景颜色也是可以修改的2.大家好,我是黑夜の骑士,欢迎大家关注我的博客,笔者将...原创 2019-08-01 22:03:01 · 2032 阅读 · 0 评论 -
C#之代码优化十大建议(翻译自TimCorey)
欢迎加入BIM行业开发交流1群,获取开发资料 群号:711844216一、背景小伙伴们在写C#程序时,会觉得自己代码写的烂,自己都不想再看第二遍,有没有什么比较好的建议,可以让我们借鉴呢?答案是有的,博主发现了国外TimCorey 大神总结的C#十大代码优化建议,写的很好,所以就将其翻译为对应的中文版,供小伙伴们学习参考。原文:Top 10 C# Best Practices (plus ...原创 2019-08-16 19:13:58 · 2413 阅读 · 0 评论 -
C#之txt的数据写入
一、背景小伙伴们在使用C#开发时,可能需要将一些信息写入到txt,这里就给大家介绍几种常用的方法。二、思路2.1将由字符串组成的数组写入txt此种方法不需要使用Flush和Close().如果没有WriteLines.txt,系统会自动帮忙创建一个string[] lines = { "这是第一行", "这是第二行", "这是第三行" };System.IO.File.Write...原创 2019-09-20 13:08:26 · 15367 阅读 · 0 评论 -
revit二开之获取嵌套族中的子族(过滤族)
一、背景小伙伴们在进行revit开发时,可能有过滤族的需求。这里的族(Family)不是族类型(FamilySymbol)也不是族实例(FamilyInstance),那么如何过滤呢?二、思路不管是在项目环境中,或者嵌套族环境中,使用以下代码即可//推荐FilteredElementCollector collector = new FilteredElementCollector(do...原创 2019-09-20 13:25:09 · 1833 阅读 · 0 评论 -
C#获得Sqlserver数据库中所有表名
一、背景小伙伴们在使用数据库时,可能需要程序自动去获取指定数据库中所有表的名称,或许根据表名特征获取相关表。二、思路1.C#连接sqlserver的就不再赘述了2.SqlConnection类的GetSchema()方法3.对表进行筛选,如果有需要的话三、代码using (SqlConnection conn = new SqlConnection(connectString)) ...原创 2019-05-24 17:57:38 · 3747 阅读 · 0 评论