C # khai báo mảng chuỗi rỗng


152

Tôi cần khai báo một mảng chuỗi trống và tôi đang sử dụng mã này

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

Nhưng tôi nhận được lỗi "tên phương thức dự kiến".

Chuyện gì vậy?


2
Tại sao bạn cần một mảng trống? Bạn đang cố làm gì vậy?
Ông T.

7
@MrT. không thực sự liên quan đến câu hỏi
James

1
@James - có thể có một cách thanh lịch hơn để làm bất cứ điều gì anh ta đang cố gắng làm.
Ông T.

4
@aquanat - mặc dù câu trả lời đã được chấp nhận và tôi không biết mã của bạn hoặc logic đằng sau nó, tôi sẽ đề nghị bạn không trả về một mảng trống nhưng null và kiểm tra từ hàm gọi nếu giá trị trả về là null hoặc không phải. Tôi nghĩ rằng nó sẽ thanh lịch hơn, dễ đọc và hiệu quả hơn nhiều.
Ông T.

2
Lý do bạn không muốn trả về null là người tiêu dùng của phương thức phải kiểm tra null. Chẳng hạn, người tiêu dùng của phương thức có thể đặt giá trị trả về trong một foreach và nếu một mảng trống được trả về, không có vấn đề gì. Tuy nhiên, nếu null được trả về, phải có kiểm tra null trước khi lặp lại giá trị được trả về
JAB

Câu trả lời:


265

Thử cái này

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

1
Cảm ơn mọi người ... đừng hỏi tôi tại sao, nhưng cách duy nhất là: string [] Array = new String [0] dưới dạng chuỗi [];
aquanat

2
Phương pháp của Atish đã hoạt động và loại bỏ sự phàn nàn của studio hình ảnh về việc sử dụng một biến không được khởi tạo nếu tôi gán nó trong một câu lệnh if
Joe

1
Tùy chọn khác làc# Array.Empty<string>()
Jannick Breunis

68

Cú pháp của bạn sai:

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

hoặc là

string[] arr = new string[0];

1
Tại sao chuỗi cả viết hoa và không viết hoa trong các ví dụ của bạn?
Đó là NÓI.

1
@newStackExchangeInstance, chỉ cần sao chép mã "nguyên trạng" từ câu hỏi. Cả hai dòng biên dịch tốt, mặc dù tôi đồng ý rằng theo một phong cách là tốt hơn.
Andrei

15

Nếu bạn đang sử dụng .net 4.6, họ có một số cú pháp mới mà bạn có thể sử dụng:

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

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

Bí quyết đẹp! Và nó cũng hoạt động với IList <T>: IList <string> x = Array.Empty <string> ();
ZunTzu


8

Các nhà xây dựng của mảng là khác nhau. Dưới đây là một số cách để tạo một chuỗi chuỗi trống:

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

(xin lỗi, trên điện thoại di động)


1

Những thứ xoăn đó đôi khi rất khó nhớ, đó là lý do tại sao có tài liệu tuyệt vời :

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

Không cần phải chỉnh sửa câu trả lời này, vì câu trả lời phục vụ mục đích của người quản lý, và không phải là câu hỏi cụ thể cho mỗi lần nói. Nó trả lời "Cú pháp khai báo và khởi tạo một mảng là gì" và là một trích dẫn từ liên kết tôi đã đăng. OP có thể thay thế intbằng stringnếu anh ấy thích.
CodeCaster

1

Cú pháp của bạn không hợp lệ.

string[] arr = new string[5];

Điều đó sẽ tạo ra arr, một chuỗi các tham chiếu của chuỗi, trong đó tất cả các phần tử của mảng này null. (Vì chuỗi là loại tham chiếu )

Mảng này chứa các phần tử từ arr[0]đến arr[4]. Các newnhà điều hành được sử dụng để tạo mảng và khởi tạo các phần tử mảng các giá trị mặc định của họ. Trong ví dụ này, tất cả các phần tử mảng được khởi tạo null.

Single-Dimensional Arrays (C# Programming Guide)


Cảm ơn mọi người ... đừng hỏi tôi tại sao, nhưng cách duy nhất là: string [] Array = new String [0] dưới dạng chuỗi [];
aquanat

0

Nếu bạn phải tạo một mảng trống, bạn có thể làm điều này:

string[] arr = new string[0];

Nếu bạn không biết về kích thước thì Bạn cũng có thể sử dụng List<string>như

var valStrings = new List<string>();

// do stuff...

string[] arrStrings = valStrings.ToArray();

Tôi rất xin lỗi Tôi vô tình làm hỏng bài viết của bạn với các chỉnh sửa sai.
Soner Gönül

-3

Sau đây nên hoạt động tốt.

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

5
Đó không phải là một mảng trống, vì nó chứa một phần tử là một chuỗi rỗng. mảng. Chiều dài () sẽ trở lại 1.
Guillermo Prandi

Đây có thể không phải là một mảng trống nhưng tôi thấy câu trả lời này là an toàn. Cảm ơn! 1 lên!
hubert17
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.