分类目录归档:CSharp

C# if语句


if语句根据条件执行不同的代码块。

if (condition)
{
  // Do something when `condition` is true
}
else
{
  // Do something when `condition` is false
}

condition为真,代码里面if部分执行,否则else执行。有时您需要添加第二个条件。为了便于阅读,您应该使用else if而不是嵌套if语句。 而不是写:

if (condition)
{
  // Do something if `condition` is true
}
else
{
  if (anotherCo...

阅读全文...

C#垃圾回收


什么是垃圾收集?

垃圾收集是程序试图释放对象等不再使用的内存空间的过程。垃圾收集对每种语言的实现都不同。大多数高级编程语言都内置了某种垃圾收集。低级编程语言可以通过库添加垃圾收集。

如上所述,每种编程语言都有自己的GC方式。在C编程中,开发人员需要使用malloc()dealloc()函数来处理内存分配和释放。对于C#应用程序,开发人员不再需要处理GC,也不建议使用它,因为.NET框架已经处理了这个问题。

内存分配如何发生?

在C#中,对象的内存分配发生在托管堆中,这由CLR(公共语言运行时)处理。堆中的内存分配是通过操作系统(OS)中的win32.dll完成的,就像在C中一样。但是在...

阅读全文...

C# for循环


for循环重复执行代码块,直到指定的条件表达式求值为false。

for循环剖析:

for (initialization; condition; iterator)
{
  body
}
  • 初始化 - 初始化语句设置初始条件,并在进入循环体之前仅运行一次。
  • condition - 布尔表达式,用于确定循环体是应该再次执行还是循环应该退出。
  • iterator - 在循环体的每次迭代后执行。

例1

for (int i = 0; i < 5; i++)
 {
    Console.WriteLine("Number " + i);
 }

输出

> Number 0
>...

阅读全文...

c# for 循环


for循环执行代码块,直到指定的条件为false。虽然for循环看起来像while循环 ,但开发人员应该正确使用它们。当迭代次数可变时使用while循环,否则使用for循环。 for循环的常见用途是数组迭代。

句法

for ((Initial variable); (condition); (step))
  {
    (code)
  }

C#for循环由三个表达式和一些代码组成。

描述

  • 初始变量 :您的起始状态,例如int i = 0;
  • 条件 :当此条件为真时,代码将继续运行,例如i <= 5;
  • 步骤 :初始变量的增量或减量,例如i ++或i- = 2。

int[]...

阅读全文...

C#扩展方法


扩展方法使您可以向现有类型“添加”方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型。对于用C#编写的客户端代码,调用扩展方法和实际在类型中定义的方法之间没有明显区别。

最常见的扩展方法是LINQ标准查询运算符,它将查询功能添加到现有的System.Collections.IEnumerable和System.Collections.Generic.IEnumerable 类型。

用法

扩展方法被定义为静态方法,但是通过使用实例方法语法来调用。它们的第一个参数指定方法操作的类型,参数前面有this修饰符。当您使用using指令将命名空间显式导入源代码时,扩展方法仅在范围内。

...

阅读全文...

C# lambda表达式


您可以将方法和属性声明为lambda表达式,而无需语句块。用于简单实现,这种语法比声明常规方法或属性更简洁,因为它消除了对一些花括号的需要和使用显式返回语句。

以下是常规方法声明的示例:

public Point CreatePoint(int x, int y)
{
  return new Point(x, y);
}

以下给出了相同的结果,但是作为表达式身体方法编写:

public Point CreatePoint(int x, int y) => new Point(x, y);

您还可以使用此语法声明属性。以下代码是我们如何声明没有lambda表达式的get-onl...

阅读全文...

C#异常


异常是程序运行时发生的意外错误,例如尝试访问不存在的文件。如果不处理,它将停止程序。

如果我们尝试读取不存在的文件的文本:

using System.IO;
string content = File.ReadAllText(@"C:\DoesNotExist.txt");

将引发FileNotFoundException

其他一些常见例外:

  • IndexOutofRangeException :尝试访问具有无效索引的数组。
  • NullReferenceException :尝试使用未分配的引用变量。
  • DivideByZeroException :尝试除以0。

最佳实践

使用tr...

阅读全文...

C#枚举


枚举是一组使用enum关键字声明的命名整数常量。

enum Gender
{
Male,
Female
}

默认情况下,对于每个枚举名称,整数值从0开始并增加1,即Male = 0,Female = 1等。

可以通过为任何枚举名称指定整数值来覆盖这些。

enum Gender
{
  Male = 1,
  Female
}

在这种情况下,整数值将从1开始并从那里开始增加。

要使用枚举,您可以声明其类型的变量并为其赋值:

Gender myVar = Gender.Male;

您还可以将枚举名称值强制转换为基础整数值,反之亦然:

Console.WriteLine($"Male:...

阅读全文...

C# do while 循环


do while循环执行一次代码块,直到条件为假。它们是while循环的一个特例:它们执行一次代码块,然后直到条件为假。 do while循环的常见用法是输入检查。

do
{
  //execute code block


} while(boolean expression);


string input = "";
do
{
  Console.WriteLine("Type A to continue: ");
  input = Console.ReadLine();
} while(input != "A");

Console.WriteLine("Bye!");

输...

阅读全文...

C# delegate


C# delegate 表示对具有给定集的方法的引用 参数和给定的返回类型。实例化委托时,可以将其关联 任何与委托类型兼容的方法:具有相同数量的参数,每个参数都是 相同的类型和返回值的类型也是相同的。

将它指定给委托时,可以使用实例方法或静态方法。

Delegate允许您将方法作为参数传递给其他方法。

委托通常用于实现回调函数。最典型的例子是事件处理程序:您注册 每当某个事件发生时要调用的方法(例如,单击鼠标按钮)。

开发人员的简短说明

委托就像C或C ++等C类语言中的函数指针。但是,它们是类型安全的。 与简单的函数指针不同 包含有关在调用委托时将调用其方法的对象实例的信息,并且具有 ...

阅读全文...