Nếu mảng trống, có vẻ như bạn không thể kiểm tra độ dài của nó bằng ".length". Cách tốt nhất để kiểm tra xem một mảng có trống không?Nếu (Array.Length == 0)
Trả lời
Bạn hoàn toàn có thể kiểm tra chiều dài của ô là rỗng. Tuy nhiên, nếu bạn cố gắng làm điều đó trên một tham chiếu null, bạn sẽ nhận được một ngoại lệ. Tôi nghi ngờ đó là những gì bạn đang chạy vào. Bạn có thể đối phó với cả hai mặc dù:
if (array == null || array.Length == 0)
Nếu đó không phải là nguyên nhân, vui lòng cung cấp một chương trình ngắn nhưng đầy đủ để chứng minh sự cố. Nếu rằng là nguyên nhân, bạn nên dành chút thời gian để đảm bảo rằng bạn hiểu các tham chiếu không có giá trị so với các bộ sưu tập/chuỗi "trống" bất kỳ thứ gì.
Yeah, vì sự an toàn có lẽ tôi sẽ làm gì:
if(array == null || array.Length == 0)
Bạn có thể sử dụng .Length
== 0 nếu chiều dài là trống và mảng tồn tại, nhưng bạn có chắc nó không phải null?
Đây là cách tốt nhất. Xin lưu ý Array là một đối tượng trong NET vì vậy bạn cần phải kiểm tra null trước.
làm bạn có nghĩa là trống hoặc null, hai thứ khác nhau,
nếu mảng được khởi tạo nhưng trống rỗng, sau đó chiều dài là đúng, nếu nó chưa được khởi tạo sau đó kiểm tra vs rỗng
kiểm tra đề nghị của bạn là tốt, miễn là mảng được intialised ...
Martin.
Như những người khác đã đề xuất có khả năng bạn đang nhận được NullReferenceException
có thể tránh được bằng cách kiểm tra xem liệu tham chiếu có phải là null
hay không. Tuy nhiên, bạn cần phải tự hỏi liệu kiểm tra đó có thực sự được bảo hành hay không. Bạn sẽ làm điều đó vì tham chiếu thực sự có thể là null
và nó là null
có ý nghĩa đặc biệt trong mã của bạn? Hay bạn sẽ làm nó để che đậy một lỗi? Bản chất của câu hỏi khiến tôi tin rằng nó sẽ là thứ sau. Trong trường hợp đó bạn thực sự cần phải kiểm tra mã sâu và tìm ra lý do tại sao tham chiếu đó không được khởi tạo đúng cách ngay từ đầu.
Jon Skeet đã trả lời chính xác. Chỉ cần nhớ rằng thứ tự của thử nghiệm trong "IF" là quan trọng. Kiểm tra null trước chiều dài. Tôi cũng thích đặt null ở phía bên trái của bình đẳng ... chỉ là một thói quen tôi nhận được từ Java đã làm cho mã hiệu quả hơn và nhanh chóng ... Tôi không nghĩ rằng nó quan trọng trong rất nhiều ứng dụng ngày hôm nay, nhưng đó là thực hành tốt.
nếu (null == mảng || array.Length == 0)
if (array.length> 0)
bạn ít nhất có thể nói lý do tại sao bạn gõ này xuống ... những gì sai với điều này? – Wills
Điều này sẽ dẫn đến một ngoại lệ tham chiếu null nếu "mảng" là null. – computerGuyCJ
cho một điều, trường hợp của bạn bị tắt; đây không phải là C# hợp lệ như được viết –
Bạn có thể sử dụng
if (array == null || array.Length == 0)
HOẶC
if (!(array != null && array.Length >= 0))
LƯU Ý !!!!! Để đảm bảo rằng C# sẽ thực hiện ngắn mạch chính xác; bạn phải so sánh đối tượng đó với NULL trước khi bạn đi đến đối tượng con so sánh của đối tượng.
kiểm tra nếu mảng là null đầu tiên, do đó bạn sẽ tránh một con trỏ ngoại lệ vô
logic trong bất kỳ ngôn ngữ: nếu mảng là null hoặc rỗng: làm ....
Nếu array
là null
, cố gắng derefrence array.Length
sẽ ném một NullReferenceException
. Nếu mã của bạn xem xét null
là một giá trị không hợp lệ cho array
, bạn nên từ chối và đổ lỗi cho người gọi. Một trong những mô hình là để ném ArgumentNullException
:
void MyMethod(string[] array)
{
if (array == null) throw new ArgumentNullException(nameof(array));
if (array.Length > 0)
{
// Do something with array…
}
}
Nếu bạn muốn chấp nhận một mảng null
như một dấu hiệu để không làm điều gì đó hoặc như là một tham số tùy chọn, bạn có thể đơn giản là không truy cập vào nó nếu nó là null:
void MyMethod(string[] array)
{
if (array != null)
{
// Do something with array here…
}
}
Nếu bạn muốn tránh chạm vào array
khi nó là null
hoặc có độ dài bằng không, khi đó bạn có thể kiểm tra cả hai cùng lúc với C#-6’s null coalescing operator.
void MyMethod(string[] array)
{
if (array?.Length > 0)
{
// Do something with array…
}
}
Thừa Thời lượng Kiểm tra
Nó có vẻ lạ mà bạn đang điều trị các mảng trống rỗng như một trường hợp đặc biệt. Trong nhiều trường hợp, nếu bạn, ví dụ: sẽ chỉ lặp lại mảng đó, không cần xử lý mảng trống dưới dạng trường hợp đặc biệt. foreach (var elem in array) {«body»}
sẽ không bao giờ thực thi «body»
khi array.Length
là 0
. Nếu bạn đang xử lý array == null || array.Length == 0
đặc biệt, ví dụ: cải thiện hiệu suất, bạn có thể cân nhắc để lại nhận xét về hậu thế. Nếu không, séc cho Length == 0
sẽ xuất hiện không cần thiết.
Mã thừa khiến cho việc hiểu chương trình khó hơn vì mọi người đọc mã có khả năng giả định rằng mỗi dòng là cần thiết để giải quyết một số vấn đề hoặc đạt được tính chính xác. Nếu bạn bao gồm mã không cần thiết, người đọc sẽ chi tiêu mãi mãi cố gắng tìm ra lý do tại sao dòng đó là hoặc là cần thiết trước khi xóa nó ;-).
- 1. Sự khác biệt giữa Array.length = 0 và Array = []?
- 2. Javascript của trình duyệt Quirks - array.Length
- 3. # nếu 0 như một định nghĩa
- 4. mysql nếu không null, 0 hoặc ""
- 5. nếu @@ Trancount> 0 không hoạt động
- 6. Nếu $ variable = 0 không hoạt động
- 7. Thực thi nếu @@ rowcount> 0 đặt lại @@ rowcount thành 0. Tại sao?
- 8. PHP Array.length cho mảng hai chiều (trục y)
- 9. Tại sao mảng Ruby [array.length, count] trả về []?
- 10. Sự khác nhau giữa Array.GetLength() và Array.Length là gì?
- 11. Remove ký tự đầu tiên từ chuỗi nếu 0
- 12. chọn true nếu sau đó 0 trong t-sql
- 13. Cách tính alpha nếu tỷ lệ lỗi bằng 0 (Adaboost)
- 14. Sử dụng request.getRemoteAddr() trả về 0: 0: 0: 0: 0: 0: 0: 1
- 15. Tập lệnh chạy với stdin nếu không có arg; nếu không tệp đầu vào = ARGV [0]
- 16. Đặt thuộc tính mặc định là 0 nếu để trống hoặc nếu không xác thực số
- 17. Lệnh .. ngắt; trong Java nếu.
- 18. exit (0) vs return 0
- 19. `java (0% 2! = 0) == false`
- 20. Nếu một chuỗi là bất biến, thì tại sao bạn phải gọi một phương thức để lấy độ dài thay vì chỉ truy cập một biến, như array.length?
- 21. Stream.Seek (0, SeekOrigin.Begin) hoặc vị trí = 0
- 22. Tại sao (Vô cực | 0) === 0?
- 23. về android Trả về getBounds trả về Rect (0, 0 - 0, 0)
- 24. CSS * {margin: 0; padding: 0;} ghi đè
- 25. Là số đếm Linq() nhanh hơn hoặc chậm hơn List.Count hoặc Array.Length?
- 26. Tại sao là Array.Length an int và không phải là uint
- 27. Tại sao 0 không bị xóa khỏi danh sách?
- 28. Số MySql() trả về 0 nếu không tìm thấy bản ghi nào
- 29. Cách gán giá trị mặc định nếu giá trị hiện tại bằng 0 trong Clojure?
- 30. Mã một lớp Python để đặt chuỗi thành 0 chuỗi nếu trống
Trong trường hợp nào một mảng có .Length == 0? Một mảng được định kích thước 0? – sooprise
... một mảng trống. –
@Soo: Vâng, chính xác. –