2C#小知识

* 关于null和""的区别



* double类型保留两位小数

 double a = 3.3333;

             //方式1 转为字符串,然后再转double
            string str = a.ToString("0.00");//a.ToString("f2");这样也可以
            a = Convert.ToDouble(str);
            Console.WriteLine(a);

            //方式2 占位符
            Console.WriteLine("{0:0.00}",a);


* 常量和只读

const:常量,常量肯定也是只读的。不变的量,只需要初始化的时候赋值,比如pai,log 。
readonly:只读

常量和只读字段的区别:
常量只能在初始化的给值,除此之外任何地方都无法修改
只读字段有两个地方可以选择
1:初始化的使用
2:构造函数 因为构造函数可以写多个,所有只读属性可以有多个不同的值。而常量始终只能一个值。



* 索引器

索引器: 可以使用 对象名加一个中括号 例如:obj[参数] ,数组,字符串 这三个地方都使用到了索引器。

索引器其实是一种特殊的属性,属性的本质是方法

索引器本质也是两个方法而已,只是一种语法糖,方便我们使用的。提供了两个特色的方法get,set

比如:用一个类当中创建索引器
image

在外面实例化调用
image



* 计时器


            //创建计时器对象
            Stopwatch sw = new Stopwatch();

            //调用开始计时的方法
            sw.Start();

			//.........一大堆用于测试的代码

            //结束
            sw.Stop();

            //输出用时
            Console.WriteLine(sw.Elapsed);


			


* @符号

1、取消\在字符串中的转义作用,使其单纯的表示为一个''
2、将字符串按照编辑的原格式输出
image



* 产生随机数

1、创建能够产生随机数的对象
Random r = new Random();

2、产生随机数 (1,7)
int rNumber = r.Next(1, 7);



* 访问修饰符

public:公共的,在任何项目每个地方都能访问
private:私有的,只能在当前类里面访问,类里面的成员默认就是这个权限
protected:受保护的,可以在当前类里面和这个类的子类里面访问。
internal:只能在当前项目中访问。
protected internal:protected+internal

能够修饰类的访问修饰符只有两个:public、internal(类默认)。

子类的访问权限不能高于父类的访问权限,会暴漏父类的成员。



* 数组的方法

数组的方法 使用关键字 Array来调用,Array是 一个静态类
Array.Sort();



* 输出对象

我们将一个对象输出到控制台 ,默认情况下,打印的就是这个对象所在的命名空间

int[] arrayint = { 1, 3, 5, 7, 9 };
Console.WriteLine(arrayint);


* 改变控制台颜色

   Console.ForegroundColor = ConsoleColor.Red;

            Console.WriteLine("sdfsd");

            Console.ForegroundColor= ConsoleColor.Blue;

            Console.WriteLine("sdfsd");


* 获得数据类型

int a1 = 15;

            Console.WriteLine(a1.GetType());


* 强类型与弱类型和var

        var :推断类型
        C#中的var和js的var不是一个意思
        C#是一门 强类型语言:在代码当中,必须对每一个变量的类型有一个明确的定义
        比如  15  必须用 int 变量名 = 15; 这样定义

          js是一门 弱类型语言:在代码当中,不需要对一个变量的类型有明确的定义
          比如 true   "张三"  15 这些值,都用var类型即可, 格式:var 变量名 = 15; 这样定义就行了,var它能根据你的值推断你的变量类型(自动)


        用var虽然方便,但是你稍微代码量上来一些,写着写着就记不得了,编译各种数据类型报错你都找不到错在哪里

        var就是把数据类型的判别工作交给编译器去做了,所以增加编译器负担,在使用var关键字的时候,必须要给变量赋初值(如果 给个null就搞笑了,内存要分配空间的啊,null没法分),
        否则var推断不出数据类型。

        用了var的地方编译器都调用了GetType方法了吧?

        js现在推荐用用let声明,1,有块级作用域概念可以变量污染,


* for与foreach

普通for循环需要知道长度,foreach无需知道长度,大量循环foreach效率比 for高



* Guid不重复的编号

用法:
Guid.NewGuid()



暂停线程

System.Threading.Thread.Sleep(1000);



抛出异常

throw new NotImplementedException();//抛出异常
如:
image



可空类型

自动属性中
public Nullable<int> ID { get; set; }
方法签名中
public void Hello(int?a){}



获取当前项目的根目录

string path = AppDomain.CurrentDomain.BaseDirectory;

在asp.net中可以用~符代表当前项目根目录



编译后的Debug里的配置文件

一般生成都会自动编译好一个Debug文件夹,这里面就是启动该项目用到的文件。比如配置文件,一般项目都会有一个配置文件。

但是,这个配置文件也会被编译后放在Debug,有时候不想打开vs软件修改后重新生成,可以直接修改编译后的配置文件信息。



项目文件始终复制和不复制

比如:在根目录里有一个plugs文件夹,里面存放了两个文件,一个始终复制,一个不复制,不复制的那个文件在每次重新编译这个项目的时候,这个文件夹里的不复制属性的文件就不会被编译复制到Debug下,反之,始终复制的话每次编译都会复制到Debug文件夹里的plugs文件夹中,每次都会替换掉旧的文件。如果不复制,如果这个文件夹里面是存程序集的话,那么反射就无法拿到不复制的程序集,因为编译后的plugs文件夹中没有属性为不复制的程序集,

我们给项目重新生成,让他编译一下



解决方案添加现有项目

posted @ 2021-09-23 20:03  青仙  阅读(130)  评论(0编辑  收藏  举报