
C#
哀家爆
这个作者很懒,什么都没留下…
展开
-
解决插件加载动态库的冲突问题
Revit插件第三方库dll加载冲突原创 2023-05-21 23:02:05 · 911 阅读 · 0 评论 -
c#编码规范
C# 编码约定转载 2023-02-26 00:08:51 · 264 阅读 · 0 评论 -
c#中事件总线的简单实现
观察者,c#,事件,事件总线原创 2023-02-11 11:32:23 · 414 阅读 · 0 评论 -
GetHashCode与Equals,==以及IEquatable<T>
GetHashCode与Equals,哈希表,C++STL,c#,Dictionary,Distinct原创 2022-08-01 21:35:02 · 390 阅读 · 0 评论 -
C#中的List<T>作为方法参数时的父类子类问题
public Class1() { var parents = new List<Parent>(); Test1(parents); Test2(parents); Test3(parents); var children = new List<Child>(); Test1(children); ...原创 2021-10-21 22:23:28 · 1582 阅读 · 0 评论 -
c#中的值类型与引用类型
c#中的五大数据类型:1.类(class)2.结构体(strcuture)3.枚举(enumeration)4.接口(interface)5.委托(delegate)其中类、接口和委托属于引用类型,结构体和枚举属于值类型。堆内存与栈内存的知识补充:1.栈(stack),调用方法时,就是在栈中进行的。栈比较小,一般只有1、2M,不小心就会发生stack overflow;2.堆(heap),用来存储对象的实例,可以有几个G大小。3.内存泄露,一个对象如果不再被使用.原创 2021-05-06 20:23:20 · 396 阅读 · 0 评论 -
c#中的委托与事件
c#中的委托,对应的关键词是delegate,是函数指针的升级版。在这里,先提一个说法:一切皆地址。大概解释一下,1.变量(数据)是以某个地址为起点的一段内存中所存储的值;2.函数(算法)是以某个地址为起点的一段内存中所存储的一组机器语言指令。再来了解一下对于函数(或者叫方法)的直接调用与间接调用的区别。1.直接调用,通过函数名来调用函数,CPU通过函数名直接获得函数地址并开始执行;2.间接调用,通过函数指针来调用函数,CPU通过读取函数指针存储的值获得函数地址并开始执行。委托就原创 2021-05-06 20:13:23 · 268 阅读 · 0 评论 -
Sql中的DateTime 溢出错误解决方案
现象:在向Sql数据库插入数据的时候,对于时间类型(DateTime)字段,容易报错"SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间"原因:原来在数据库中DateTime类型的字段最小值为1/1/175312:00:00,而.NET Framework框架中,DateTime类型的最小值为1/1/0001 0:00:00,超出了Sql的值的最小范围,导致在数据插入的时候发生溢出的错误。所以如果一开.原创 2021-03-04 23:39:43 · 3203 阅读 · 2 评论 -
C#中的事务Transaction
实际项目中,遇到一个问题:软件界面中,有个提交按钮,点击后,做了2个动作:1.更新数据库中的对应字段;2.向另外一个服务器发送请求;开发过程中,第一步完成了,第二步失败了,但是我希望如果第二步失败的话,第一步最好也别执行。所以就想到了Sql中,以及Revit二次开发中,都有事务这个处理方式,将需要绑定在一起的几个方法,包裹在事务中,实现要成功一起成功,要失败一起失败个效果。在.net framework中,也有这样的事务处理。 using (var sco原创 2021-03-04 23:33:21 · 1812 阅读 · 2 评论 -
Nuget的使用说明
在做项目的时候,经常需要添加一些第三方引用,Visual Studio 2019环境下,最推荐的是Nuget安装方式,好处就是可以将所有依赖的包全部打包下载安装。1.nuget.org,搜索需要的nuget包,复制相应的安装命令,如下图2.工具--Nuget包管理器--程序包管理器控制台,调出“程序包管理器控制台”视图,输入第一步中复制的命令,比如:Install-Package Pomelo.EntityFrameworkCore.MySql -Version 5.0.0-alpha.2原创 2021-02-25 09:41:53 · 966 阅读 · 0 评论 -
epplus读写Excel
using OfficeOpenXml;using OfficeOpenXml.Style;using System;using System.Collections.Generic;using System.Drawing;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApp4{ class Program { .原创 2021-02-18 10:53:24 · 1012 阅读 · 0 评论 -
dll路径问题
// 运行时的dll所在的文件夹地址,比如:D:\Work Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); // 运行时的dll的完整地址,比如:D:\Work\RevitDemo.dll Assembly.GetExecutingAssembly().Location; /// 运行时的dll的名称,比如:RevitDemo...原创 2021-01-03 15:40:57 · 365 阅读 · 0 评论 -
C#类库项目创建config文件
我们知道,不管是WPF项目、Winfrom项目或者是Web项目,都有专属于自己的App.config,那么类库项目的config文件如何创建和使用呢?1.添加新建项:应用程序配置文件(Application Configuration File);2.修改新建的配置文件名称:项目名称.dll.config;3.修改配置文件属性:复制到输出目录:始终复制;生成操作:内容调用:// 打开dll所在路径var dllConfig = ConfigurationManager原创 2020-11-16 16:43:39 · 4164 阅读 · 0 评论 -
C#中的 readonly和const
1.const比较简单,相当于声明了一个常量。在常量声明的时候进行赋值,其他任何地方不得更改此值(不然编译器直接报错)2.readonly,用的不多,之前以为和const一样,最近看视频,发现了好几次readonly,但是作者却在其他地方又对这个变量进行赋值了,不是只读么?官方文档这样解释的:可以在字段声明和构造函数中多次分配只读属性。即在变量声明的时候,可以赋值;在类的构造函数中,也可以再次赋值或者更改其值。但是在其他方法函数中,是不可以更改只读变量/属性的...原创 2020-08-03 10:53:24 · 193 阅读 · 1 评论 -
Visual Studio断点调试的一些小技巧
之前在调试的时候,比较讨厌断点打在for或者foreach中,我是这样操作的,运行程序的时候,代码直接跳到15行,然后检查变量,然后不断的F10,F10,F10一直到下一次循环的该断点处,再检查变啦,然后再不断的F10,F10,F10,每次都好麻烦。现在知道了,直接按continue,或者直接F5,就会在调试过程中直接跳到下一个断点处。应用在循环中,就是直接F5跳到下一次循环的该断...原创 2020-03-07 00:31:46 · 2200 阅读 · 0 评论 -
C# if中如果有多个条件,执行顺序如何?对象的Null判断
之前写的代码是这样的。对可空类型的变量做操作时,会先判断一下是否为空string myString=null;if(myString!=null) { if(myString.Length>0) { }}其实2个if是可以放在一起写的,string myString=null;if(myString!=null && m...原创 2020-03-01 17:01:17 · 1625 阅读 · 0 评论 -
C# $和@的用法
int a = -777777777;Console.WriteLine("Please type a number between 1 to 10..." + a);Console.WriteLine($"Please type a number between 1 to 10...{a}");之前连接字符串的时候都是用+来,有了$符号以后,可以直接在双引号中间直接放...原创 2020-02-29 14:18:34 · 1022 阅读 · 0 评论 -
单元测试
待添加,在刘铁猛老师《C#语言入门详解》视频中,第28集有讲到在visual studio中如何进行单元测试。原创 2019-11-30 23:24:10 · 158 阅读 · 0 评论 -
可选参数与具名参数
static void Main(string[] args) { Print();//全部默认值, Print("wan",22);//部分赋值 Print("wan");//部分赋值,部分默认值 Print(22);//报错:不能将int类型转换成string ...原创 2019-11-29 22:54:35 · 561 阅读 · 0 评论 -
=>的几种玩法
1. 作为7.0的新特性的一种语法糖。public int OuterMarginSize{ get => mWindow.WindowState == WindowState.Maximized ? 0 : mOuterMarginSize; set => mOuterMarginSize = value; }2. 如果只有一个get属性,即只读属...原创 2019-11-26 09:39:58 · 229 阅读 · 0 评论 -
关于接口interface的新发现
接口应该说就是规定了某些属性或者行为,实现某接口就必须实现其抽象方法或属性。有这么一个案例:wpf中的passwordbox控件的password属性,是不能被viewmodel绑定的,不过可以通过SecurePassword来进行访问。那绑定不了,我们在viewmodel中如何获取到view中的密码呢?一般来说,我们的viewmodel中不应该含有任何和界面有关的东西,就是说vi...原创 2019-11-24 19:26:28 · 182 阅读 · 0 评论 -
c#参数列表中的this---扩展方法的使用
今天在看WPF视频的时候,遇到了在参数列表中写了this的案例,第一次见到。public static void AddSlideFromRight(this Storyboard storyboard, float seconds, double offset, float decelerationRatio=0.9f) { }具体方法体我们就不...原创 2019-11-16 23:28:56 · 331 阅读 · 0 评论 -
C#异步之Task和await
转载自:https://blog.youkuaiyun.com/qc530167365/article/details/83108848上面这篇文章介绍的比较详细。下面来进行一个非常简单的案例讲解,class Program { static void Main(string[] args) { MethodAsync(...原创 2019-11-16 20:24:50 · 2167 阅读 · 0 评论 -
C#第九回:如何跳出if语句以及程序运行时间
切正题前,using System.Diagnostics;Stopwatch.start(),stop(),restart(),,stopwatch.elapsedticks可以查询程序的运行时间。好了,跳出if语句有两种方式,return和goto;方法A中,不存在跳转,时间为105,方法B中,用了goto,时间为7;说到这里,就得提到一个程序优化的原则:多层嵌套条件语句的时候,如果知道结果,...原创 2018-06-26 20:36:43 · 10824 阅读 · 0 评论 -
Revit二次开发第九回:获取梁的截面宽和高
最简单的办法是,通过类型参数,获取梁的截面参数:FamilyInstance.Symbol.LookupParameter().AsValueString();FamilyInstance familyInstance = beamFoundationList[0]; string Bname = familyInstance.Symbol.LookupParameter(...原创 2018-06-26 19:26:40 · 3387 阅读 · 0 评论 -
C#第六回:try catch
try 代码段中是用来捕获异常的操作,catch代码段中是捕获到异常以后进行的操作。下面这段代码,当执行第七行的时候,会出错,然后会直接跳入catch中,然后继续执行catch之后的代码,注意,try代码段中,第7行之后的所有代码都不会执行了。本实例中,指的是7和8行。显然,该标高还是被创建了,只是名称未修改。 1. using (Transaction ts=new Tra...原创 2018-06-18 01:07:05 · 386 阅读 · 0 评论 -
C#第五回:SQL Server
感觉目前的二次开发可能用不到,但是学习过程中,尤其是WINFORM中的好多案例,都是和数据库结合的,所以不得不看。下面代码中列了一些常用的,就当做是工具来看吧,后面有需要的再细看。SqlConnection conn; private void Form1_Load(object sender, EventArgs e) { try ...原创 2018-06-18 00:54:52 · 150 阅读 · 0 评论 -
C#第八回:与Office的互动
不知道是不是之前的操作有误,导致自己添加的dll和命名空间一直提示不存在。1.添加引用,COM,类型库,搜索:Microsoft Excel Object Library2.using Excel=Microsoft.Office.Interop.Excel如果是与Word的互动,则把上两步中对应的Excel换成Word即可。...原创 2018-06-24 22:31:44 · 197 阅读 · 0 评论 -
C#第七回:DialogResult
一直没太搞明白这个逻辑是什么意思,今天无意中看到个例子,终于小小的理解了一下。下面这段代码很好理解,//create a new dialog, and get the value by using dialogResult DialogResult dialogResult= MessageBox.Show("是否要创建目录" + textBox1...原创 2018-06-21 21:59:00 · 3077 阅读 · 0 评论 -
C#第四回:同一个解决方案中不同的CS文件之间的合作问题
在Revit二次开发中,一个插件往往附带很多功能,不同功能,对应一个不同CS文件,那若是大家都需要用到同一种方法,怎么办呢?比如a.cs中的A类中的A1()方法;b.cs文件中B类中的B1()方法;方法1(不推荐):b中需要用到A1方法,则A a=new A();a.A1();即先实例化A类,再通过实例调用A1方法。方法2(推荐):新建一个文件,专门用来存放项目中需要用到的方法,尤其是大家都有可能...原创 2018-06-06 19:00:07 · 1801 阅读 · 0 评论 -
C#第三回:标准查询表达式LINQ
其实就是对于集合的一系列遍历操作。下例中,from,where,select就相当于foreach的遍历。static void Main(string[] args) { var p1 = new Person("wang", 33); var p2 = new Person("yuan", 34); var p4 ...原创 2018-04-26 16:53:39 · 153 阅读 · 0 评论 -
C#第一回:类
早就想开始记录自己的学习点滴,奈何因为网络原因,直到今天,发现自己学的不太扎实,又忘记了之前的知识,想翻之前的笔记什么根本找不到了。好了,开始。class Program { static void Main(string[] args) { Person person = new Person();原创 2018-04-25 12:01:37 · 158 阅读 · 0 评论 -
C#第十回:集合的删除与添加
一般来说,foreach循环中的list不能有添加、删除等操作,以防发生异常;可以用for来代替若是添加元素,则正序添加;for(int i=0;i<10;i++)若是删除元素,则倒序删除;for(i=9;i>=0;i--)...原创 2018-06-27 10:21:57 · 350 阅读 · 0 评论 -
Revit二次开发第十二回:ComboBox中的楼层显示问题
楼层:标高1,标高2,。。。。对于上面的combobox,datasource=list<level>,则combobox中显示的是乱糟糟,所以我就把datasource改成了,list.selece(x=>x.name),可是这样的话,获取选择项怎么获取?其实,在combobox中,有个属性,displaymember,cboLevel.DataSource=list<L...原创 2018-07-03 15:13:21 · 634 阅读 · 0 评论 -
C# 事件
事件其实很简单,当然是在了解了之后。定义就不说了,可以理解为一种特殊的、进阶的委托。相信大家都用过winform里面的事件,比如Button的Click事件,当我们单击按钮的时候,触发事件,执行相关的操作。例子也很简单,员工A每次玩手机的时候,都会被员工B数落一通。我们定义了两个类,员工A,员工Bclass I { string name; ...原创 2019-06-27 16:52:05 · 289 阅读 · 0 评论 -
类与类之间的变量传递
最近在学习mvvm模式,卡在了不知道如何将vm中的参数或者变量传递给m,如果是重新实例化vm,那可能得到的数值会有变化,或者vm中带了很多动作,会有重复操作。看视频的时候,无意中听到了一个词:静态的单一实例。private static Class instance=new Class();public static Class Instance{ get {return ins...原创 2019-01-17 09:03:35 · 1144 阅读 · 0 评论 -
C# 类型转换is和as
看书得来的知识点://第一种转换if(elem is Solid){Solid solid=elem as Solid;}//第二种转换Solid solid=elem as Solid;if(solid!=null)......在第一种方式中,CLR对对象检查了两次;二次第二种方式中,只检查了一次,运算速度远大于第一种; 两种方式结果是一样的。对于as转...原创 2018-11-17 21:08:26 · 160 阅读 · 0 评论 -
C# using中经常出现的XXX=XXXX是这个
REVIT的API中,有的命名空间有个Form和Windows中的Form名称是重合的,这样的情况,有两种做法:1.使用的时候,Windows.Form 和 Autodesk.Revit.UI.Form来进行区分,即使用完整的名称;2.在using中,进行重命名:using UIForm=Autodesk.Revit.UI.Form;这样在使用的时候,直接用UIForm来代替Aut...原创 2018-11-17 21:12:50 · 1227 阅读 · 0 评论 -
C#
List<int> list=new List<int>(){1,5,3};list.OrderBy();list.Sort()对于上一段代码,若方法的返回值是List<int>,则需要用一个列表来接收这个方法,即原有的list是不会变化的。你要得到变化的,必须这样:list=list.OrderBy(); 若方法的返回值是void,则无需接...原创 2018-09-14 09:46:03 · 138 阅读 · 0 评论 -
c#:visual studio
说来羞愧,被同门发现了这个号,其实写的都是很基础甚至小白的常识。最近在写一个平台,用的VS,然后写了一堆类出来,差不多10个?发现很乱,越写越乱,所以就上网搜大神帖子,类似如何让自己的代码更整洁,更完善之类的。后面就知道了重构,关于方法、命名等等,总算知道了正确的途径。然后就提到了类的短小精悍的说法,就想到了让自己的类再小点,可是这已经10多个类了,再多,怎么办?最后就有了这篇文章,知...原创 2018-09-23 23:53:16 · 244 阅读 · 0 评论