卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章18830本站已运行342

数组在 C# 中如何工作?

数组在 C# 中如何工作?

数组表示给定类型的固定数量的元素。元素存储在连续的内存块中,只要您知道元素的索引,就可以高效地访问元素。

声明和初始化数组的 C# 语法如下 -

'
// create a string array to hold 5 languages
string[] languages = new string[3];

声明数组后,您可以使用数组上的平方符号来填充数组中的项目。

'
languages[0] = "csharp";
languages[1] = "visual basic";
languages[2] = "f#";

但是,有一种替代的简洁语法可以将上述两个步骤组合在一个步骤中。

'
string[] languages = new string[] { "csharp", "visual basic", "f#" };

使用 C# 中的隐式类型变量,您可以去掉变量名称左侧的类型,而只使用 var。

'
var languages = new string[] { "csharp", "visual basic", "f#" };

您可以使用相同的平方表示法访问数组中的任何元素。

'
string language = languages[0];
Console.WriteLine(language); // prints csharp

数组的 Length 属性告诉我们该数组中有多少项。

'
int count = languages.Length;
Console.WriteLine(count); // 3

请务必记住,数组一旦创建就无法更改其长度。尝试访问数组边界之外的元素会引发异常。

'
string lang = languages[3]; // throws System.IndexOutOfRangeException

如果要循环数组,请使用该语言提供的 for 或 foreach 循环。

'
// for loop
for (int i = 0; i < languages.Length; i++){
   string l = languages[i];
   Console.WriteLine(l); // prints the names of languages in sequence
}
// foreach loop
foreach (string l in languages){
   Console.WriteLine(l); // prints the names of languages in sequence
}

默认值

创建数组时,C# 编译器会将元素初始化为其默认值。例如,创建一个整数数组会将每个元素的值设置为 0。

'
var numbers = new int[3];
foreach (int num in numbers){
   Console.WriteLine(num); // prints 000
}

当元素属于值类型时,该类型的每个成员都会分配给其默认值。

'
Point[] a = new Point[4];
int x = a[2].X;
Console.WriteLine(x); // prints 0
public struct Point { public int X, Y; }

但是,对于引用类型,编译器只是为每个项目创建空引用。

'
User[] u = new User[4];
int y = u[2].Y; // NullReference exception
public class User { public int X, Y; }

要避免该错误,您必须显式初始化每个项目,如下所示。

'
User[] users = new User[5];
for (int i = 0; i < users.Length; i++) // Iterate i from 0 to 999
users[i] = new User();

示例

实时演示

'
using System;
class Program{
   static void Main(){
      string[] languages = new string[3]; // create a string array to hold 5 languages
      languages[0] = "csharp";
      languages[1] = "visual basic";
      languages[2] = "f#";
      string[] langugages_two = new string[] { "csharp", "visual basic", "f#" };
      var languages_three = new string[] { "csharp", "visual basic", "f#" };
      string language = languages[0];
      Console.WriteLine(language); // prints csharp
      int count = languages.Length; // 3
      Console.WriteLine(count);
      //string lang = languages[3]; // throws System.IndexOutOfRangeException
      // for loop
      for (int i = 0; i < languages.Length; i++){
         string l = languages[i];
         Console.WriteLine(l); // prints the names of languages in sequence
      }
      // foreach loop
      foreach (string l in languages){
         Console.WriteLine(l); // prints the names of languages in sequence
      }
      var numbers = new int[3];
      foreach (int num in numbers){
         Console.WriteLine(num); // prints 000
      }
      Point[] a = new Point[4];
      int x = a[2].X;
      Console.WriteLine(x); // prints 0
      User[] u = new User[4];
      //int y = u[2].Y; // NullReference exception
      User[] users = new User[5];
      for (int i = 0; i <users.Length; i++) // Iterate i from 0 to 999
      users[i] = new User();
   }
}
public struct Point { public int X, Y; }
public class User { public int X, Y; }

输出

'
csharp
3
csharp
visual basic
f#
csharp
visual basic
f#
0
0
0
0
卓越飞翔博客
上一篇: 提高PHP技术,走向高薪职位
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏