C#
C#知识图谱
东方紫歌
给力主程,问题解决者,团队效率引擎
擅长:不断优化游戏制作流程提升整体制作效率,优化游戏性能适配高中低类机型,编写特定shader效果提升游戏画面表现
展开
-
C# 彻底搞懂async/await
前言Talk is cheap, Show you the code first!private void button1_Click(object sender, EventArgs e){ Console.WriteLine("111 balabala. My Thread ID is :" + Thread.CurrentThread.ManagedThreadId); AsyncMethod(); Console.WriteLine("222 balabala. My转载 2020-06-02 10:32:35 · 307 阅读 · 0 评论 -
C#获取文件的MD5值
public static string GetMD5HashFromFile(string fileName) { try { FileStream file = new FileStream(fileName, FileMode.Open); System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoSer...原创 2020-05-22 17:23:40 · 791 阅读 · 0 评论 -
C# 反射的委托创建器
.Net 的反射是个很好很强大的东西,不过它的效率却实在是不给力。已经有很多人针对这个问题讨论过了,包括各种各样的 DynamicMethod 和各种各样的效率测试,不过总的来说解决方案就是利用 Expression Tree、Delegate.CreateDelegate 或者 Emit 构造出反射操作对应的委托,从而实现加速反射的目的。虽然本篇文章同样是讨论利用委托来加速反射调用函数,不过重点并不在于如何提升调用速度,而是如何更加智能的构造出反射的委托,并最终完成一个方便易用的委托创建器 Deleg转载 2020-05-22 15:55:31 · 231 阅读 · 0 评论 -
使用ToUpperInvariant避免使用ToUpper
ToUpperInvariant使用不依赖于区域性进行转换,而ToUpper则使用了当前线程的CultureInfo,进行转换,所以性能会有所影响,以下为测试: [Test] public void TestInvariant() { Int32 count = 1000 * 1000; Stopwatch watch = new Stopwatch(); String str = "abcdefg转载 2020-05-22 15:32:15 · 811 阅读 · 0 评论 -
有关C#标签Attribute的熟悉
Attribute 简单用法:最近用到了,所以静下心来找些资料看了一下,终于把这东西搞清楚了。一.什么是Attribute先看下面的三段代码:自定义Attribute类:VersionAttribute [AttributeUsage(AttributeTargets.Class)] public class VersionAttribute : Attribute { public string Name { get; set; } publi转载 2020-05-22 14:42:30 · 179 阅读 · 0 评论 -
Unity中如何优雅的将Excel单元格数据转换成基础类型或者数组
在游戏开发中经常需要把策划提供的Excel表格转换成Unity可以序列化读取的ScriptableObject对象。不同的单元格数据可能会被转换成不同的类型,如string,int,float,bool,Enum等。为了简洁转换代码,可以定义一个泛型方法ToValue统一处理。using System;public class ExcelReader{ protected T ToValue<T>(string s) { Type type = typeo原创 2020-05-22 14:04:09 · 747 阅读 · 0 评论 -
C#中string.format用法详解
String.Format 方法的几种定义:String.Format (String, Object) 将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项。String.Format (String, Object[]) 将指定 String 中的格式项替换为指定数组中相应 Object 实例的值的文本等效项。String.Format (IFormatProvider, String, Object[]) 将指定 String 中的格式项替换为指定数组中相应 Ob转载 2020-05-21 17:54:55 · 815 阅读 · 0 评论 -
简述C#之sealed 修饰符
用于类时,表示该类不能再被继承,不能和 abstract 同时使用,因为这两个修饰符在含义上互相排斥用于方法和属性时,表示该方法或属性不能再被重写,必须和 override 关键字一起使用,因为使用 sealed 修饰符的方法或属性肯定是基类中相应的虚成员通常用于实现第三方类库时不想被客户端继承,或用于没有必要再继承的类以防止滥用继承造成层次结构体系混乱恰当的利用 sealed 修饰符也可以提高一定的运行效率,因为不用考虑继承类会重写该成员示例:using System;using转载 2020-05-21 15:43:48 · 244 阅读 · 0 评论 -
C#中struct和class的区别详解
简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上。class是引用类型,创建一个class类型实例被分配在托管堆上。但struct和class的区别远不止这么简单。概括来讲,struct和class的不同体现在:● 类是引用类型,struct是值类型● 在托管堆上创建类的实例,在栈上创建struct实例● 类实例的赋值,赋的是引用地址,struct实例的赋值,赋的是值● 类作为参数类型传递,传递的是引用地址,struct作为参数类型传递,传递的是值● 类没有默认无参转载 2020-05-21 15:36:51 · 239 阅读 · 0 评论 -
C# 托管资源和非托管资源
托管资源指的是.NET可以自动进行回收的资源,主要是指托管堆上分配的内存资源。托管资源的回收工作是不需要人工干预的,有.NET运行库在合适调用垃圾回收器进行回收。非托管资源指的是.NET不知道如何回收的资源,最常见的一类非托管资源是包装操作系统资源的对象,例如文件,窗口,网络连接,数据库连接,画刷,图标等。这类资源,垃圾回收器在清理的时候会调用Object.Finalize()方法。默认情况下,方法是空的,对于非托管对象,需要在此方法中编写回收非托管资源的代码,以便垃圾回收器正确回收资源。在.NET中,转载 2020-05-21 15:23:10 · 171 阅读 · 0 评论 -
谈C#中的Delegate
引言 Delegate是Dotnet1.0的时候已经存在的特性了,但由于在实际工作中一直没有机会使用Delegate这个特性,所以一直没有对它作整理。这两天,我再度翻阅了一些关于Delegate的资料,并开始正式整理这个C#中著名的特性。本文将由浅入深的谈一下Delegate这个特性。一.Delegate是什么? Delegate中文翻译为“委托”。Msdn中对Delegate的解释如下:C#中的委托类似于C或C++中的函数指针。使用委托使程序员可以将方法引用封装在委托对...转载 2020-05-21 14:44:35 · 256 阅读 · 0 评论 -
C# 如何直接初始化Dictionary
Dictionary<string, int> dict = new Dictionary<string, int>() { {"a", 1}, {"b", 2}, {"c", 1}};原创 2020-05-21 14:58:47 · 6071 阅读 · 0 评论