[C#] Array Spread 

จริงๆเรียกว่าลองมาทวนๆ JavaScript แล้วมีงงๆกับ Array Spread นิดหน่อย เลยลองดูจาก Doc จาก Spread syntax (...) - JavaScript | MDN (mozilla.org) สรุปแตก Element ข้างในออกมาให้ตัวย่อยสุด

  • Array String แตกออกมาเป็น String
  • Array int แตกออกมาเป็น int
  • Array ผสมกัน แตกออกมาเป็น แต่ละตัวตาม Type

ตัวอย่างของ Javascript ก็ตาม ด้านล่างนี้เลย

//String 
const testStrArr = "Hello World"
console.log(...testStrArr);

//int
const testNumberArr = [1, 2, 3];
console.log(...testNumberArr);

//Mix 
const testMixArr = [1, "two", 3];
console.log(...testMixArr);

ดูมีประโยชน์ดี แล้ว C# มันมีไหม คำตอบเพิ่งมีตอนปีที่แล้วใน C#12 ครับ Pattern คล้ายกับของ JS เลย ใช้ตัว

.. variable_name

ตัวอย่างตามนี้เลย

using System;
					
public class Program
{
	public static void Main()
	{
		int[] row0 = [1, 2, 3];
		int[] row1 = [4, 5, 6];
		int[] row2 = [7, 8, 9];

        int[] single = [.. row0, .. row1, .. row2, 15, 20];
		foreach (var element in single)
		{
			Console.Write($"{element}, ");
		}
		
	}
}
var numbers = new double[] {1.5, 2.0, 3.0}; // Double usually doesn't have precision issues with small whole numbers

Console.WriteLine(Sum(numbers));

แล้วถ้ามาลองตัวอย่างที่ตัวอย่างใน Spread syntax (...) - JavaScript | MDN (mozilla.org)

  • JavaScript
console.log("==========================================");
function sum(x, y, z) {
  return x + y + z;
}

console.log(sum(...testNumberArr));
// Expected output: 6
console.log(sum.apply(null, testNumberArr));
// Expected output: 6
  • C# ตอนนี้ยังทำไม่ได้นะ มันจะขึ้น Error แทน ดังรูปเลย

สรุป Spread Operator ของ C# ยังไม่เท่ากับของตัว JavaScript นะ

  • JavaScript - แตก Element ออกมา
  • C# แยก Index ออกมา

Bonus

แล้วถ้าก่อนหน้า C#12 ทำยังไง กำหนด Data Type ให้รับ Array ครับ แล้วให้ Trick .Sum เอา

public int Sum(params int[] values)
{
     return values.Sum();
}
var numbers = new int[] {1,2,3};
Console.WriteLine(Sum(numbers));

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.