C#知识整理-语句
申明语句
关键字:var,const,ref
var关键字申明变量时需要赋值,null值不能作为值赋给
const关键字申明的变量不能再进行赋值
ref关键字申明表示引用另一个变量,值的改变也跟随引用一起
详细可见:
string greeting = "Hello"; int x = 1, y = 2; List<int> list; var flag = false; const string hello = "Hello";//hello 无法再赋值 ref int refX = ref x; refX = 10; Console.WriteLine($"refX:{refX} | x:{x}");//refX:10 | x:10
异常处理语句
关键字:throw,try-catch-finally
throw 抛出一个自定义的异常
catch 可以提供多个catch子句
finally 当控件离开try块时,将执行finally块
public class Statement { private string name; public string Name { get => name; set => name = value ?? throw new ArgumentNullException(paramName: nameof(value), message: "Name Can Not Be Null"); } public override string ToString() => $"Name:{name}"; } var testClass = new Statement(); try { testClass.Name = null; } catch (Exception ex) { Console.WriteLine(ex.Message); //Name Can Not Be Null(Parameter 'value') } finally { testClass.Name = "test"; } Console.WriteLine(testClass);//Name:test
迭代语句
关键字:for,foreach,do,while
for (var i = 0; i < 3; i++) { Console.Write(i); } //output:012 Console.WriteLine(); List<int> list = new List<int>{ 1, 3, 5, 2, 4, 6 }; foreach (var i in list) { Console.Write(i); } //output:135246 Console.WriteLine(); var j = 0; while (j < 3) { Console.Write(j); j++; } //output:012 Console.WriteLine(); j = 0; do { Console.Write(j); j++; } while (j < 3); //output:012 Console.WriteLine(); j = 3; do { Console.Write(j); j++; } while (j < 3); //output:3 Console.WriteLine();
选择语句
关键字:if,if-else,switch
DisplayMeasurement_Switch(-4); // Output: Measured value is -4; too low. DisplayMeasurement_Switch(5); // Output: Measured value is 5. DisplayMeasurement_Switch(30); // Output: Measured value is 30; too high. DisplayMeasurement_If(-4); // Output: Measured value is -4; too low. DisplayMeasurement_If(5); // Output: Measured value is 5. DisplayMeasurement_If(30); // Output: Measured value is 30; too high. static void DisplayMeasurement_Switch(int measurement) { switch (measurement) { case <0: Console.WriteLine($"measured value is {measurement}; too low."); break; case > 15: Console.WriteLine($"measured value is {measurement}; too high."); break; default: Console.WriteLine($"Measured value is { measurement}."); break; } } static void DisplayMeasurement_If(int measurement) { if (measurement < 0) { Console.WriteLine($"measured value is {measurement}; too low."); } else if (measurement > 15) { Console.WriteLine($"measured value is {measurement}; too high."); } else { Console.WriteLine($"Measured value is {measurement}."); } }
跳转语句
关键字:break,continue,return,goto
public class Jumping { public static void TestBreak() { int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; foreach (int i in numbers) { if(i==3) { break; } Console.Write(i); } Console.WriteLine(); Console.WriteLine("TestBreak End"); } public static void TestContinue() { int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; foreach (int i in numbers) { if (i == 3) { continue; } Console.Write(i); } Console.WriteLine(); Console.WriteLine("TestContinue End"); } public static void TestReturn() { int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; foreach (int i in numbers) { if (i == 3) { return; } Console.Write(i); } Console.WriteLine(); Console.WriteLine("TestReturn End inside function"); } public static void TestGoTo() { int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; foreach (int i in numbers) { if (i == 3) { goto end; } Console.Write(i); } end: Console.WriteLine(); Console.WriteLine("TestGoTo End"); } } //Jumping Jumping.TestBreak(); /* * output: * 12 * TestBreak End */ Jumping.TestContinue(); /* * output: * 12456789 * TestContinue End */ Jumping.TestGoTo(); /* * output: * 12 * TestGoTo End */ Jumping.TestReturn(); Console.WriteLine(); Console.WriteLine("TestReturn End"); /* * output: * 12 * TestReturn End */
Lock语句
关键字:lock
独占访问权限,最常见的就是单例模式中保证线程安全
public class Singleton { private static Singleton instance; private static readonly object lockObject = new object(); public static Singleton Instance { get { if (instance == null) { lock (lockObject) { if (instance == null) { instance = new Singleton(); } } } return instance; } } private Singleton() { } }
using语句
关键字:using
使用using需要调用实现IDisplsable接口的对象,跳出using语句块将自动执行dipose方法
最常见的使用就是使用Stream或DBConnection的时候
using (var sw = new System.IO.StreamWriter(cs)) { sw.Write(toBeEncrypted); } using (OleDbConnection connection = new OleDbConnection(connectionString)) { //logics }
yield语句
关键字:yield return, yield break
在迭代器中使用yield语句提供下一个值或表示迭代结束
foreach (int i in ProduceEvenNumbers(9)) { Console.Write(i); } // output: 02468 Console.WriteLine(); int[] val = { 2, 3, 5, -1, 3, 4 }; Console.WriteLine(string.Join(" ", TakePositive(val))); // output:2 3 5 static IEnumerable<int> ProduceEvenNumbers(int upto) { for(int i = 0; i <= upto; i++) { yield return i; } } static IEnumerable<int> TakePositive(IEnumerable<int> numbers) { foreach(int i in numbers) { if (i > 0) yield return i; else yield break; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix