제안 1: 문자열을 올바르게 사용하세요
string str1 = "str1" + 9; string str2 = "str2" + 9.ToString();
첫 번째 코드 줄은 박싱과 문자열 연결을 생성합니다
두 번째 코드 줄은 내부적으로 사용되는 ToString()을 사용합니다. Number.FormatInt32
프로토타입은
그리고 NumberFormatInt32는 관리되지 않는 메서드로 일반 C# 관리 코드보다 훨씬 더 효율적으로 실행되므로 코드의 두 번째 줄이 첫 번째 줄보다 더 효율적입니다
그것은 무엇입니까? 관리 코드와 비관리 코드입니다. 다른 블로그의 한 구절을 인용했습니다:
관리 코드 및 비관리 코드우리 모두 알고 있듯이 일반 프로그래밍에 사용하는 고급 언어는 컴퓨터에서 인식할 수 없습니다. . 고급 언어를 기계가 이해하고 실행하려면 먼저 기계어로 번역해야 합니다. 简单理解就是托管代码加了一个中间层,使其可以跨平台,不过效率会降低,而非托管代码就不会产生这样的情况 所以我们编写代码秉承一个原则:尽量减少装箱拆箱 StringBuilderStringBuilder的效率来源于预先以非托管的方式分配内存,如果没有预先定义长度,默认长度为16,不够的时候会重新分配内存,依次加16的倍数,所以如果你提前知道字符串需要的最大长度,最好预先定义好,这样就不会频繁分配内存从而带来效率的降低 2、使用默认转型方法 这个建议的大体内容是尽量使用系统所带的转换类型的方法 例如 int.Parse ToString() System.Convert 等等 3、区别对待强转类型和as is两个类型之间转换有两种情况 1. 他们是父子类的关系: ChildType = (ChildType)ParentType 2.没有继承关系,或者继承同一个父类,这时候就需要重写强转方法 class FirstType { public string Name { get; set; } } class SecondType { public string Name { get; set; } public static explicit operator SecondType(FirstType firstType) { SecondType secondType = new SecondType() { Name = firstType.Name }; return secondType; } } FirstType firstType = new FirstType() { Name = "张" }; SecondType secondType = (SecondType)firstType; 如果是继承的关系,为了效率推荐使用 ChildType = ParentType as ChildType 这个就更上面提到的,尽量使用系统方法的转换,而不是强制转换 我写Unity的时候有这样一个需求,右键点击装备的时候会使用,装备有Equipment,Weapon,我们需要判断是Equipment还是Weapon类型,它们都是继承Item类型,有两种方法可用: Weapon weapon = item as Weapon; if(weapon != null) { //TODO 使用武器 } if(item is Weapon) { weapon weapon = item as Weapon; //TODO 使用武器 } 第一种方法只判断了一次类型,而第二种方法判断了两次类型 书上说as不能判断基元类型,但是经过我的测试发现书上写错了,as仅仅不能判断值类型,这里大家可以自己测试一下 相关文章: |
위 내용은 C# 학습 기록: 고품질 코드 작성 및 조직 제안 개선 1-3의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!