C # ประกาศอาร์เรย์สตริงที่ว่างเปล่า


152

ฉันต้องประกาศอาเรย์สตริงว่างและฉันใช้รหัสนี้

string[] arr = new String[0]();

แต่ฉันได้รับข้อผิดพลาด "ชื่อเมธอดที่คาดว่า"

เกิดอะไรขึ้น


2
ทำไมคุณต้องมีอาร์เรย์ที่ว่างเปล่า คุณพยายามจะทำอะไร?
นายต

7
@MrT ไม่เกี่ยวข้องกับคำถามจริงๆ
James

1
@ James - อาจมีวิธีที่สง่างามกว่าในการทำสิ่งที่เขาพยายาม
นายต

4
@aquanat - แม้ว่าคำตอบจะได้รับการยอมรับแล้วและฉันไม่ทราบรหัสของคุณหรือตรรกะที่อยู่เบื้องหลังฉันจะขอแนะนำให้คุณอย่าส่งคืนอาเรย์ที่ว่างเปล่า แต่เป็นโมฆะและตรวจสอบจากฟังก์ชันการโทรถ้าค่าที่ส่งคืนเป็นโมฆะหรือ ไม่. ฉันคิดว่ามันจะหรูหราอ่านและมีประสิทธิภาพมากขึ้น
นายต

2
เหตุผลที่คุณไม่ต้องการคืนค่า null ก็คือผู้บริโภคของวิธีการนั้นต้องตรวจสอบค่าว่าง ตัวอย่างเช่นผู้บริโภคของวิธีการสามารถใส่ค่าที่ส่งคืนใน foreach และถ้าอาร์เรย์ที่ว่างเปล่าจะถูกส่งกลับจะไม่มีปัญหา อย่างไรก็ตามหากมีการส่งคืน null จะต้องมีการตรวจสอบ null ก่อนทำซ้ำค่าที่ส่งคืน
JAB

คำตอบ:


265

ลองสิ่งนี้

string[] arr = new string[] {};

1
ขอบคุณทุกคน ... อย่าถามฉันว่าทำไม แต่วิธีเดียวคือ: string [] arr = new String [0] เป็น string [];
aquanat

2
วิธีการของ Atish ทำงานและกำจัด visual studio บ่นเกี่ยวกับการใช้ตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้นถ้าฉันกำหนดไว้ในคำสั่ง if
Joe

1
ตัวเลือกอื่นคือc# Array.Empty<string>()
Jannick Breunis

68

ไวยากรณ์ของคุณผิด:

string[] arr = new string[]{};

หรือ

string[] arr = new string[0];

1
ทำไมสตริงทั้งตัวพิมพ์ใหญ่และไม่พิมพ์ใหญ่ในตัวอย่างของคุณ
It'sNotALie

1
@newStackExchangeInstance เพียงคัดลอกโค้ด "ตามสภาพ" จากคำถาม ทั้งสองบรรทัดคอมไพล์ได้ดีแม้ว่าฉันยอมรับว่าการติดตามหนึ่งสไตล์ดีกว่า
Andrei

15

หากคุณใช้. net 4.6 พวกเขามีไวยากรณ์ใหม่บางอย่างที่คุณสามารถใช้ได้:

using System;  // To pick up definition of the Array class.

var myArray = Array.Empty<string>();

เคล็ดลับดี! และยังใช้งานได้กับ IList <T>: IList <string> x = Array.Empty <string> ();
ZunTzu


8

ตัวสร้างอาร์เรย์มีความแตกต่างกัน ต่อไปนี้เป็นวิธีสร้างอาร์เรย์สตริงที่ว่างเปล่า:

var arr = new string[0];
var arr = new string[]{};
var arr = Enumerable.Empty<string>().ToArray()

(ขออภัยบนมือถือ)


1

สิ่งที่หยิกบางครั้งก็ยากที่จะจำได้นั่นคือเหตุผลที่มีเอกสารยอดเยี่ยม:

// Declare a single-dimensional array  
int[] array1 = new int[5];

ไม่จำเป็นต้องแก้ไขคำตอบนี้เนื่องจากคำตอบมีวัตถุประสงค์ทั่วไปไม่ใช่คำตอบเฉพาะ มันตอบ"ไวยากรณ์คืออะไรที่จะประกาศและเริ่มต้นอาร์เรย์"และเป็นการอ้างอิงจากลิงค์ที่ฉันโพสต์ OP สามารถแทนที่intด้วยstringถ้าเขาชอบ
CodeCaster

1

ไวยากรณ์ของคุณไม่ถูกต้อง

string[] arr = new string[5];

ที่จะสร้างarrอาร์เรย์ของสายอ้างอิงที่องค์ประกอบทั้งหมดของอาร์เรย์nullนี้ (เนื่องจากสตริงเป็นประเภทอ้างอิง )

อาร์เรย์นี้มีองค์ประกอบจากไปarr[0] ผู้ประกอบการใช้ในการสร้างอาร์เรย์และเริ่มต้นองค์ประกอบอาร์เรย์เป็นค่าเริ่มต้นของพวกเขา ในตัวอย่างนี้ทุกองค์ประกอบอาร์เรย์จะเริ่มต้นได้ที่arr[4]newnull

Single-Dimensional Arrays (C# Programming Guide)


ขอบคุณทุกคน ... อย่าถามฉันว่าทำไม แต่วิธีเดียวคือ: string [] arr = new String [0] เป็น string [];
aquanat

0

หากคุณต้องสร้างอาเรย์ที่ว่างเปล่าคุณสามารถทำได้:

string[] arr = new string[0];

หากคุณไม่ทราบขนาดก็สามารถใช้List<string>เช่นกัน

var valStrings = new List<string>();

// do stuff...

string[] arrStrings = valStrings.ToArray();

ฉันขอโทษ. ฉันทำลายโพสต์ของคุณโดยไม่ได้ตั้งใจด้วยการแก้ไขที่ผิด
Soner Gönül

-3

ต่อไปนี้ควรทำงานได้ดี

string[] arr = new string[] {""};

5
นั่นไม่ใช่อาเรย์ที่ว่างเปล่าเนื่องจากมันมีองค์ประกอบหนึ่งซึ่งเป็นสตริงที่ว่างเปล่า arr.Length () จะกลับมา 1
Guillermo Prandi

นี่อาจไม่ใช่อาเรย์ที่ว่างเปล่า แต่ฉันพบว่าคำตอบนี้ปลอดภัย ขอบคุณ! 1 ขึ้น!
hubert17
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.