![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#
wxlguitar
这个作者很懒,什么都没留下…
展开
-
闭包
List<Action> lst = new List<Action>();for(int i=0; i<5; i++){ // wrong, output:55555 Action act = ()=>Console.WriteLine(i); // correct, output:01234 /* int temp = i; Action act原创 2017-07-20 14:34:31 · 157 阅读 · 0 评论 -
C#序列化
using System;using System.IO;using System.Runtime.Serialization.Formatters.Binary;public class BinarySerializer{#region Serialize public static void SerializeToFile<T>(T obj, string fileDir, st原创 2017-07-20 18:17:27 · 228 阅读 · 0 评论 -
for与foreach的使用场景
foreach特点:基于迭代器实现 使用方便 自动将代码置入try finally块 自动调用IDispose接口for特点:基于索引实现 支持遍历时进行增删操作 内存垃圾比foreach少原创 2017-07-18 10:46:55 · 1229 阅读 · 0 评论 -
测试垃圾回收次数
static int collectionCount = 0;static Stopwatch watch = null;static int testCount = 100000;static void TestBegin(){ GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); collect原创 2017-07-18 11:04:07 · 384 阅读 · 0 评论 -
C#异常
使用原则:正常业务逻辑,不要使用异常来处理不要总是尝试去捕获或引发异常,而应该允许异常向调用堆栈往上传播只有在出现资源问题,严重错误时才引发异常如果向用户抛出异常,最好包装一下,引发一个含有友好信息的新异常抛出新异常,需要将原有异常附加进来,便于查错在try finally中返回数据若在try中返回值类型数据,则在finally中对数据的操作无效若在try中返回引用类型数据,则在fi原创 2017-07-21 15:48:01 · 320 阅读 · 0 评论 -
Linq
基本结构static void ListFiles(string rootDir, string searchParttern){ var ret = from fileName in Directory.GetFiles(rootDir, searchParttern) let fi = new FileInfo(fileName) orderby fi.原创 2017-07-19 10:07:09 · 175 阅读 · 0 评论 -
委托
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。它可以定义在类体外。public delegate string GetNameDelegate;public class Test{ public Test() { PrintName(GetNameID, 11); } private void PrintName(G原创 2017-07-19 14:55:13 · 178 阅读 · 0 评论 -
文本读写
使用FileStream读取using(FileStream fs = File.OpenRead(@"/Users/wxl/Workplace/test.txt")) { byte[] arr = new byte[100]; UTF8Encoding encoding = new UTF8Encoding(true);原创 2017-08-21 22:34:11 · 190 阅读 · 0 评论 -
??运算符
Person p;Person tmp = new Person();p = p ?? tmp; // 如果p为空,则取tmp,否则不变原创 2017-08-23 11:29:14 · 232 阅读 · 0 评论 -
C#比较器
// 实现可比较接口using System;class Salary : IComparable{ public Salary(int val){ this.val = val; } public int val { set; get; } override public string ToString(原创 2017-07-17 22:24:05 · 2651 阅读 · 0 评论 -
C#显示与隐式转换操作符
C#类中显示与隐匿转换操作符同时只能实现一个// 显示转换操作符static public explicit operator Salary(int n){ Salary s = new Salary(n); return s;}// 隐式转换操作符static public implicit operator Salary(int n){ Salary原创 2017-07-17 22:01:35 · 2336 阅读 · 0 评论 -
泛型
基本class MyData <T>{ private List<T> lst = new List<T>(); public void Push(T item) { lst.Add(item); } public void Print() { foreach(T item in lst) {原创 2017-07-20 12:47:01 · 137 阅读 · 0 评论 -
资源管理
要及时释放资源,否则资源一直被占用,浪费内存不说,在下次垃圾回收前,此资源也不能被再次访问// using讲法糖会自动帮我们捕获异常,同时调用Dispose方法using(FileStream fs = new FileStream("@c:\test.txt", FileMode.Open)){ ...}原创 2017-07-20 17:22:48 · 144 阅读 · 0 评论 -
C#优化
as效率比强制转型高 强制转型有可能会抛出异常,而且实际上调用的是操作转换符函数; 当将基类型转换为子类型时使用as,其它情况应实现转换操作符,以便进行强转class SecondType{ public string Name{set;get;} public static explicit operator SecondType(FirstType firstType)原创 2017-07-17 18:11:48 · 459 阅读 · 0 评论 -
C#中Equal与==的使用原则
Equal与==都可以被重写,但要把握的原则是:重写Equal来表示值相等,而不重写==继续让其表示引用相同class Person{ public Person(int id) { ID = id; } public string ID{get; private set;} public override bool Equals(ob原创 2017-07-17 22:39:32 · 506 阅读 · 0 评论 -
C#深度拷贝,浅拷贝
使用序列化的方法实现深度拷贝非常方便using System;using System.IO;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;[Serializable]class Person : ICloneable{ public object Cl原创 2017-07-17 23:14:08 · 333 阅读 · 0 评论 -
使用dynamic简化反射
通常我们这样使用反射来调用一个函数MethodInfo fun = typeof(Person).GetMethod("Speak");string msg = (string)fun.Invoke(new Person(), new object[]{"hehe"});而使用dynamic可以简化这个流程,而且效率更高// .NetFrameWork4.0新特性,unity目前的mono版本还原创 2017-07-17 23:48:10 · 230 阅读 · 0 评论 -
readonly与const的区别
const效率高,但readonly更灵活。区别如下:const是一个编译期常量, readonly是一个运行时常量const只能声明基元类型,枚举类型,字符串类型。readonly则无限制const天生为静态数据,无需再添加static标识readonly是运行时变量,只能赋值一次。特例是可以定义时赋值一次,构造函数中再赋值一次原创 2017-07-17 21:09:29 · 576 阅读 · 0 评论 -
C#运算符重载
class Salary{ public Salary(int val){ this.val = val; } public int val { private set; get; } override public string ToString() { return val.ToSt原创 2017-07-17 21:54:54 · 177 阅读 · 0 评论 -
@操作符
将关键字作为变量名int @int = 10;不转义字符string path = @"c:\documents";原创 2017-08-23 12:03:23 · 161 阅读 · 0 评论