Lập trình C#

Khai báo mảng kiểu ngầm định (Implicitly Typed Array C#3.0)

Khai báo mảng kiểu không tường minh (Implicitly Typed Array C#3.0)
Được viết bởi Minh Hoàng

Series lập trình C#, ngôn ngữ lập trình hiện đại và mạnh mẽ.

– Trong bài viết này, chúng ta sẽ cùng thảo luận về cách khai báo mảng kiểu ngầm định (Implicitly Typed Array). Trước khi đi vào chi tiết chúng ta cùng xem một ví dụ sau đây:

namespace MinhHoangBlog
{
	class Program
	{
		static void Main(string[] args)
		{
			// Khai báo mảng
			var arr = new int[] { 1, 2, 3 };
		}
	}
}

– Khi nhìn vào các giá trị khởi tạo của câu lệnh khai báo mảng ở ví dụ trên, có hiểu được đây là một mảng kiểu integer, vậy mà cũng cần ghi thêm kiểu dữ liệu là int vào phía trước. Đây là sự trùng lặp không cần thiết. Với tính năng Implicitly Typed Array trong C# 3.0 cho phép chúng ta viết thành câu lệnh khai báo như sau:

// Khai báo mảng
var arr = new [] { 1, 2, 3 };

※ Tính năng Implicitly Typed Array có nghĩa là: khi các phần tử của mảng cùng chung kiểu dữ liệu rồi thì không cần khai báo thêm tên của kiểu dữ liệu nữa. Các mảng được khai báo ngầm định là các mảng mà có loại dữ liệu được suy ra từ phần tử được chỉ định khi khởi tạo mảng.

– Như vậy với các tính năng khai báo kiểu không tường minh (khai báo ngầm định) trong C# 3.0, chúng ta có các cách viết như sau:

// Cách khai báo truyền thống
int[] arr = new int[] { 1, 2, 3 };

// Tính năng Implicitly Typed Local Variable
var arr = new int [] { 1, 2, 3 };

// Tính năng Implicitly Typed Array
var arr = new [] { 1, 2, 3 };

Khác với tính năng Implicitly Typed Local Variable, tính năng Implicitly Typed Array có thể được khai báo ngoài body của một phương thức.

Xem thêm: Khai báo biến kiểu ngầm định (Implicitly Typed Local Variable C#3.0).

Một số điểm quan trọng khi sử dụng mảng khai báo ngầm định
#1/4:

Không chứa bất kỳ loại dữ liệu cụ thể nào. Khi người dùng khởi tạo mảng với bất kỳ kiểu dữ liệu nào thì trình biên dịch sẽ tự động chuyển đổi kiểu dữ liệu của mảng thành kiểu dữ liệu đó.

#2/4:

Các mảng khai báo ngầm định thường được khai báo bằng cách sử dụng từ khóa var.

#3/4:

Khi khởi tạo mảng khai báo ngầm định thì tất cả các phần tử phải có cùng kiểu dữ liệu.

– Nếu chúng ta khai báo như sau sẽ bị lỗi, vì lúc này compiler thấy một mảng có cả giá trị integer, cả giá trị string nên sẽ không biết chúng ta muốn tạo mảng có kiểu dữ liệu là gì!?

var arr = new[] { 1, "" };		// ERROR

– Để fix lỗi này thì có 2 cách xử lý:

Cách 1: viết khai báo tường minh kiểu dữ liệu của mảng thành kiểu object (sẽ nhận được hết giá trị int, string):

var arr = new object [] { 1, "" };	// OK

Tuy nhiên nếu viết theo cách này thì chúng ta đã mất đi tính năng Implicitly Typed Array.

Cách 2: Do đó, nếu vẫn muốn sử dụng tính năng Implicitly Typed Array thì sẽ viết như sau:

var arr = new[] { (object)1, "" };	// OK
#4/4:

Tất cả các loại mảng một chiều, nhiều chiều hay Jagged Arrays,… đều có thể được tạo như một mảng khai báo ngầm định.

Xem thêm:
Kiểu mảng array trong lập trình C#.
Jagged Array trong lập trình C#.

Ví dụ 1/3: Khai báo và khởi tạo mảng 1 chiều implicitly typed array

using System;

namespace MinhHoangBlog
{
	class Program
	{
		static void Main(string[] args)
		{
			// 1-D implicitly typed array 
			var arrWebsite = new[] {"minhhn.com", "google.com",
								    "bongda.com.vn", "24h.com.vn"};

			Console.WriteLine("List of Websites is: ");

			// In mảng
			foreach (string data in arrWebsite)
			{
				Console.WriteLine(data);
			}

			Console.ReadKey();
		}
	}
}
Output:

List of Websites is:
minhhn.com
google.com
bongda.com.vn
24h.com.vn

Ví dụ 2/3: Khai báo và khởi tạo mảng nhiều chiều implicitly typed array

using System;

namespace MinhHoangBlog
{
	class Program
	{
		static void Main(string[] args)
		{
			// 2-D implicitly typed array 
			var arrLanguage = new[,] { {"C", "Java"},
									{"Python", "C#"} };

			Console.WriteLine("Programming Languages: ");

			string val;

			// Hiển thị giá trị [0, 1] 
			val = arrLanguage[0, 1];
			Console.WriteLine(val);

			// Hiển thị giá trị [1, 0] 
			val = arrLanguage[1, 0];
			Console.WriteLine(val);

			Console.ReadKey();
		}
	}
}
Output:

Programming Languages:
Java
Python

Ví dụ 3/3: Khai báo và khởi tạo implicitly typed jagged array

using System;

namespace MinhHoangBlog
{
	class Program
	{
		static void Main(string[] args)
		{
			// Implicitly typed jagged array 
			var jarray = new[] {new[] { 785, 721, 344, 123 },
								new[] { 234, 600 },
								new[] { 34, 545, 808 },
								new[] { 200, 220 } };

			Console.WriteLine("Data of jagged array is :");

			// In mảng
			for (int ii = 0; ii < jarray.Length; ii++)
			{
				for (int jj = 0; jj < jarray[ii].Length; jj++)
					Console.Write(jarray[ii][jj] + " ");
				Console.WriteLine();
			}

			Console.ReadKey();
		}
	}
}
Output:

Data of jagged array is :
785 721 344 123
234 600
34 545 808
200 220

Cảm ơn bạn đã theo dõi. Đừng ngần ngại hãy cùng thảo luận với chúng tôi!

Giới thiệu

Minh Hoàng

Xin chào, tôi là Hoàng Ngọc Minh, hiện đang làm BrSE, tại công ty Toyota, Nhật Bản. Những gì tôi viết trên blog này là những trải nghiệm thực tế tôi đã đúc rút ra được trong cuộc sống, quá trình học tập và làm việc. Các bài viết được biên tập một cách chi tiết, linh hoạt để giúp bạn đọc có thể tiếp cận một cách dễ dàng nhất. Hi vọng nó sẽ có ích hoặc mang lại một góc nhìn khác cho bạn[...]

Translate »