![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#
文章平均质量分 54
萧然CS
喜欢玩游戏,更喜欢做游戏
展开
-
【Unity/C#】小数Round取整时,以0.5结尾的小数取整结果问题,Round(1.5)=2且Round(2.5f)=2
小数Round取整时,以0.5结尾的小数取整结果问题,Round(1.5)=2,并且Round(2.5f)=2 ???测试代码: Debug.Log(Mathf.Round(1.5f)); //2 Debug.Log(Mathf.Round(2.5f)); //2 Debug.Log(Mathf.Round(3.5f)); //4 Debug.Log(.原创 2021-10-04 22:06:45 · 2095 阅读 · 0 评论 -
【C#】判断某元素是否在List内、从List中获取指定元素 各方式效率对比(List.Exists与List.Contains,List.Find与Linq)
测试代码: List<int> testList = new List<int>(); for(int i = 0; i < 10000; i++) { testList.Add(i); } DateTime startTime = DateTime.Now; for(int i = 0; i < 20000; i++) { .原创 2021-09-01 19:37:27 · 6656 阅读 · 0 评论 -
【C#】自定义权重获取随机数
自定义随机权重,获取随机数public class NewBehaviourScript : MonoBehaviour{ [System.Serializable] public class RandomConfig { public RandomConfig(int v,int w) { value = v; weight = w; } //返回值(不一定是i原创 2021-07-18 15:45:58 · 2185 阅读 · 0 评论 -
【C#】字典Dictionary.Add不是把新的元素插入到字典最后面
有些时候在Dictionary中Add添加键值对后,并不是直接加到Dictionary的最后面,遍历时元素的顺序不是元素添加的先后顺序。因为字典Dictionary并不是有序存储的,在删除中间某个元素后,会留下一个空位,后续添加元素会填到这个空位,导致顺序“错乱”。Dictionary实现原理参考:浅谈C# Dictionary实现原理代码演示:Log结果显示,字典内元素顺序是"1,2,6,4,5",而不是"1,2,4,5,6"。 Dictionary<int, str原创 2020-09-11 18:02:42 · 4107 阅读 · 0 评论 -
【C#】【温故知新】枚举类型Enum定义位标志,与或非的计算
使用枚举类型定义位标志,从而使该枚举类型的实例可以存储枚举数列表中定义的值的任意组合。每个枚举值值都是2的n次幂,指数依次递增。官方文档:枚举类型(C# 编程指南),FlagsAttribute Class示例://组合枚举常量中的各个标志不会重叠,0表示未设置任何标志// 0 - None// 1 - Black// 2 - Red// 3 - Black, Red// 4 - Green// 5 - Black, Green// 6 - Red, Green// 7 -原创 2020-07-24 22:40:25 · 772 阅读 · 0 评论 -
【C#】【温故知新】委托与接口中泛型的协变与逆变
public class Test : MonoBehaviour{ //协变,out修饰返回值 public delegate T Function<out T>(); //逆变,in修饰传入参数 public delegate void Action<in T>(T t); public class Animal { } public class Dog : Animal { } private void Start.原创 2020-06-20 23:48:15 · 252 阅读 · 0 评论 -
【C#】【温故知新】类型转换之拆箱/装箱(boxing/unboxing),溢出检测checked/unchecked,自定义转换implicit/explicit
装箱boxing:是值类型到引用类型的隐式转换,根据值类型的值,在堆上创建一个完整的引用类型对象,并返回对象的引用。 int i = 1; //值类型 object o = i; //引用类型,在堆上创建int对象,将i的值赋值给对象,将对象的引用返回给o装箱操作后,原值类型与新引用类型相互独立,可以单独操作。 int i = 1; object o = i; Debug.Log(i + "原创 2020-06-20 22:02:34 · 284 阅读 · 0 评论 -
【C#】【温故知新】多维数组之矩形数组与交错数组
数组分为一维数组与多维数组,多维数组又分为矩形数组与交错数组。矩形数组:某个维度的所有子数组长度相同。(与矩阵类似) int[,,] array1 = new int[2, 3, 2]; int[,,] array2 = new int[,,] { { { 1, 1 },{ 2, 2 },{ 3, 3 } }, { { 4, 4 },{ 5, 5 },{ 6, 6 } } };交错数组:.原创 2020-06-20 17:31:31 · 394 阅读 · 0 评论 -
【C#】函数返回多个值/Tuple元组/ValueTuple值元组
//可返回多个值,需要早函数外声明字段,通过函数修改字段值 private void TestFunc1(ref string key, ref int value) { key = "key"; value = 1; } private void TestFunc2(out string key, out int valu...原创 2020-04-25 19:27:17 · 3701 阅读 · 0 评论 -
【C#】【温故知新】函数/方法参数基础
1. 值参数通过将实参的值复制到形参的方式把数据传递给方法,在栈中为形参分配空间。值类型参数会被复制,产生一个独立的数据项; 引用类型会复制引用,实参和形参都引用堆中同一个对象; 引用类型值参数,如果在方法内创建一个新对象并赋值给形参,将切断形参与实参的联系,在方法结束后,新对象也将不存在,实参仍指向原始对象。2. 引用参数(ref)方法的声明和调用中都要用ref修饰,实参必须是...原创 2020-04-15 23:51:06 · 216 阅读 · 0 评论 -
【Unity】动态移除Mono脚本/组件
脚本与组件同理,MonoBehaviour继承Behaviour,Behaviour继承Component,所有组件也是继承Component,脚本可以理解为是自定义的组件。 Rigidbody rigidbody; void Start() { //添加组件 rigidbody = gameObject.AddComponent<...原创 2020-04-14 17:11:00 · 3501 阅读 · 0 评论 -
【C#】字典Dictionary添加元素,除了使用Add还可以这样?
// 01, 初始化的时候进行赋值 Dictionary<int, string> dic = new Dictionary<int, string>() { { 1, "str111" } }; // 02, 使用Add添加 dic.Add(2, "str222"); // 03, 直...原创 2019-12-24 14:39:57 · 16627 阅读 · 0 评论 -
【C#】被问到的二叉树,原来长这样
二叉树,一个枝长着两个叉的树,hhh二叉树是每个节点最多有两个子节点的树状链式结构,看起来,是更复杂维度的链表:实现方式能搜到好多,鉴于没有实际用过,直接上链接:二叉树的简单介绍以及二叉树的存储结构C#实现二叉树--二叉链表结构...转载 2019-11-22 16:43:32 · 199 阅读 · 0 评论 -
【C#】Hashtable哈希表及其与Dictionary字典的区别
Hashtable哈希表:看起来与Dictionary何止是相似啊Hashtable与Dictionary,都是key/value键值对的形式,区别在于Hashtable的键值是object(DictionaryEntry),值类型,数据排列是乱序的;而Dictionary是泛型(KeyValuePair<T, T>),引用类型,按插入顺序排列数据Hashtable相对...原创 2019-11-22 11:58:42 · 1813 阅读 · 0 评论 -
简易的A*算法 自动寻路
参考:堪称最好最全的A*算法详解(译文)unity3D 简单实现A*算法路径计算方式(详见参考:堪称最好最全的A*算法详解(译文)):曼哈顿距离,横向和纵向直线距离,仅限于横向纵向移动 对角线距离,对角线 + 直线,可以横向、纵向、对角线方向移动 欧几里得距离,任意角度直线,任意方向移动using System.Collections;using System.Colle...原创 2019-04-05 09:18:27 · 1485 阅读 · 0 评论 -
【C#】自定义Sort函数排序规则
sort()函数默认是升序排序,只能应用于C#指定数据类型,但这里要和大家分享的是自定义Sort函数排序的对象和规则,方便大家去选择适合自己项目的排序。代码实现:using System;using System.Collections;using System.Collections.Generic;using UnityEngine;namespace Demo024{...原创 2018-10-28 12:55:08 · 4427 阅读 · 0 评论 -
【C#】数据结构汇总
对C#涉及到的数据结构做了一下简单的汇总,若有遗漏,欢迎补充~~还是以学习为目的,在此只是简单的介绍一下,希望对大家能有所帮助,能力有限为了不误导大家,不做详细深入的解析,还望见谅,非常欢迎大大们补充~~1. 数组 Arrayint[] array = new int[] { };// 常用,长度固定,需要在初始化时指定长度// 在内存中是连续的,遍历速度快,增加删除元素慢,...原创 2018-10-27 17:10:48 · 5977 阅读 · 0 评论 -
【C#】重写Equals与运算符“==“及二者区别
先说一下函数Equals和运算符"=="二者的区别:1. 对比值类型:”==“ 与 ”Equals“ 一样,都是对比变量值C#已经重写了string的”==“和”Equals“,对比结果与值类型一致2. 对比引用类型:引用类型:内容存储在堆,堆地址存储在栈”==“ 对比引用地址,即栈内存储的堆地址”Equals“ 对比对象,即堆上存储的对象内容举一个栗子来说明重写,...原创 2018-10-27 16:57:03 · 1217 阅读 · 2 评论 -
【C#】ToString() / String.Format() / DateTime 格式化
ToString是将其他数据类型转为String并格式化,Format则是对String格式化,DateTime 的时间也有多种格式。在UI显示时经常会用到各种各样的转换字符串或格式化,比如小数点后保留指定位数,数值采用逗号分隔,货币、日期等特殊结构显示等 ··· ···网上可以搜到好多相关的详细说明,这里仅以学习为目的,收集了几位大大的博文,后面就偷懒直接粘链接啦 i...转载 2018-10-27 16:36:09 · 2216 阅读 · 0 评论 -
【C#】ToString() / String.Format() / DateTime 格式化
ToString是将其他数据类型转为String并格式化,Format则是对String格式化,DateTime 的时间也有多种格式。 在UI显示时经常会用到各种各样的转换字符串或格式化,比如小数点后保留指定位数,数值采用逗号分隔,货币、日期等特殊结构显示等 ··· ··· 网上可以搜到好多相关的详细说明,这里仅以学习为目的,收集了几位大大的博文,后面就偷懒直接粘链接啦 ...转载 2018-09-03 23:37:12 · 1045 阅读 · 0 评论 -
【C#】中 Array / List / Dictionary之相互转换
Array / List / Dictionary 是C#中最常用到的数据结构,都是引用类型,有时候为了不影响源数据,可以复制一份利用复件进行一些计算,有些情况下为了便于计算,还需要对数据结构进行转换,下面整理了Array / List / Dictionary两两相互转换的方法,希望可以帮到大家~//先声明,接下来对数据进行转换 string[] testAarray = new ...原创 2018-09-01 15:56:43 · 11891 阅读 · 0 评论 -
【C#】This扩展方法
比如 "gameObject.GetComponent<Transform>() ;" 可以通过GameObject直接调用Unity定义好的API "GetComponent",如果已有API满足不了使用需求,还可以利用This关键字进行扩展(专业名词应该是链式编程),当然也不仅限于GameObject。比如:修改Transform.Position的X值: ...原创 2018-10-28 12:55:44 · 878 阅读 · 0 评论 -
【Unity】协程的调用停止及yield return的使用
在动态加载资源或创建对象的时候,由于数量较多,在同一帧完成大量计算可能造成程序卡顿现象,这里就要用到协程,将大量计算分散到多帧里面完成。或在程序执行到某一步,需要等待一段时间,然后在继续执行,也需要用到协程。还有其他一些情况下,充分利用协程,可以更好地实现功能。分享一下个人对协程的一些使用理解:public void Start() { //开启协...原创 2018-10-27 16:53:02 · 20690 阅读 · 8 评论 -
【Unity】使用 [xxx] 标记类和方法
代码中很方便的 [xxx] 标记,比如工作中最常用的[SerializeField]等,还有扩展编辑器、自定义工具窗口,都需要用到[xxx]标记,网上可以搜到非常多且详细的介绍说明,比如:Unity常用[xxx]用法 特性(https://blog.csdn.net/FifthGently/article/details/78363364),整理的非常齐全而且简单明了,需要的童鞋们可以百...原创 2018-10-27 16:27:00 · 673 阅读 · 0 评论 -
【C#】通过Value获取Dictionary的Key
Dictionary<string, int> dic = new Dictionary<string, int>(); for (int i = 0; i < 10; i++) { dic.Add("string_" + i, i); } //...原创 2019-01-24 17:19:51 · 2130 阅读 · 0 评论 -
【C#】System.Linq,万能的查询语句
首先是官方文档:https://docs.microsoft.com/zh-cn/dotnet/api/system.linq?view=netframework-4.7.2https://docs.microsoft.com/zh-cn/dotnet/api/system.linq.enumerable?view=netframework-4.7.2合理的使用System.Linq类库...原创 2019-01-25 16:41:51 · 12886 阅读 · 3 评论 -
【C#】正则表达式匹配/替换指定字符串
using System.Collections;using System.Collections.Generic;using System.Text.RegularExpressions;using UnityEngine;public class Test : MonoBehaviour{ void Start() { string tStr =...原创 2019-02-13 16:56:28 · 7575 阅读 · 0 评论 -
【C#】参数修饰符、可变参数、可选参数
//out //out修饰的参数必须是变量, 在函数体内必需进行赋值, 且必须在参数使用前赋值 //因此在调用函数传参时,out修饰的参数值是用不到的, 可以不对其赋值, 传入函数体后, 要先赋值再使用 void ParameOut(out int value) { value = 0; } //ref //re...原创 2018-11-26 20:36:46 · 1565 阅读 · 0 评论