C#的一些零碎知识点

  • 什么时候用queue和stack?
  • Arrays和List是“随机”读取的,很灵活。但如果你想用先进先出,或者先进后出的顺序,就可以用queue 和 stack。
  • 遍历List<T>会以什么顺序进行?
  • 这取决于IEnumerator的实现,但是对于List<T>,它将始终按照列表的自然顺序进行,即与索引器的顺序相同list[0],list[1],list[2]等。
public static Tuple<bool, string>  SaveData(string name,int id){
    //......
    return Tuple.Create<bool, string>(true, "保存成功");
}
//外部调用和接收返回值
Tuple<bool, string> result = SaveData(name, id);
result.Item1,result.Item2//取值
  • C#的 DateTime
DateTime d = new DateTime();//此时d初始值是0001/1/1 0:00:00
DateTime a = DateTime.UtcNow ;//世界标准时间(不带时区)
DateTime b = DateTime.Now ;//系统的本地时间(有时区)
  • C#6特性:空传播运算符
UserMode user = new UserMode();
Response.Write(user?.Name);//user为空时也不抛异常
//-----
Action<string> fb=null;
if (fb != null)// fb不为空,则调用回调方法
{
    fb(val);
}
//fb?.Invoke(val); 简化版本调用
  • 空合并运算符(??)
  • int y = x ?? -1;,如果x不为空,则y为x。如果为空,那么y为-1。
  • 用问号表达式实现:int y = (x==null) ? -1 : x;
  • 可空类型修饰符?
  • int? h=null; 表示可空的整型。
  • DateTime? time = null; 表示time可为空。
  • 如果没问号int和datetime等类型是不能为空的!
  • C#的$符号
string name="tome";
string v= string.Format("hi {0}", name);
string v2= $"hi {name}";
  • C#的@符号
string a1 = @"
			a,
			b
			";//✔
			
string a2 = "{"a","b","c"}";//✔

 
string a3 = @"{"a",
			 "b",
			 "c"}";//❌,会报异常

string a4 = @"{""a"",
			 ""b"",
			 ""c""}" ;//✔
  • C#字符串操作大全

  • 预处理器指令,这些命令不会转化为可执行代码,但会影响编译过程的各个方面。如发布两版代码,即基本版和企业版,就可以使用这些预处理器指令。编写调试信息的代码时,也可以使用预处理器指令。常用#region和#endregion。微软提供了:#if、#else、#elif、#endif、#define、#undef、#warning、#error、#line、#region、#endregion、#pragma、#pragma warning、#pragma checksum,各命令用法:博客C# 预处理器指令

  • 输出异常对象主要属性Message/StackTrace/Source,方便日后排查问题。(其他:C#获取堆栈信息,输出文件名、行号、函数名、列号等

public static void Main(string[] args)
{
	Test(1, 0);
}

public static void Test(int i, int c)
{
	try
	{
		decimal a = i / c;
	}
	catch (Exception ex)
	{
		StringBuilder sb = new StringBuilder();
		sb.AppendLine("===Exception ↓===");
		sb.AppendLine(ex.Message);
		sb.AppendLine(ex.Source);
		sb.AppendLine(ex.StackTrace);
		sb.AppendLine("=======↑========");
		Console.WriteLine(sb.ToString());
		Console.ReadLine();
		throw;
	}
}
【控制台显示】
===Exception↓===
尝试除以零。
EventDemo
   在 EventDemo.Program.Test(Int32 i, Int32 c) 位置 D:	estEventDemoEventDemoProgram.cs:行号 39
=======↑========
原文地址:https://www.cnblogs.com/anjun-xy/p/11286480.html