C # boş dize dizisi bildir


152

Boş bir dize dizi bildirmek gerekiyor ve bu kodu kullanıyorum

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

Ancak "yöntem adı bekleniyor" hatası alıyorum.

Sorun nedir?


2
Neden boş bir diziye ihtiyacınız var? Ne yapmaya çalışıyorsun?
Bay T.

7
@MrT. soruyla gerçekten alakalı değil.
James

1
@James - belki de yapmaya çalıştığı her şeyi yapmanın daha zarif bir yolu var.
Bay T.

4
@aquanat - bir cevap zaten kabul edilmiş olmasına rağmen ve kodunuzu veya arkasındaki mantığı bilmiyorum, alçakgönüllülükle boş bir dizi döndürmemenizi, ancak null değerinin döndürülmesini ve döndürülen değerin boş olması durumunda arama işlevinden kontrol etmenizi öneririm. değil. Çok daha zarif, okunabilir ve verimli olacağını düşünüyorum.
Bay T.

2
Null değerini döndürmek istememenizin nedeni, yöntemin tüketicisinin null değerini denetlemesi gerektiğidir. Örneğin, yöntemin tüketicisi döndürülen değeri bir foreach değerine yerleştirebilir ve boş bir dizi döndürülürse sorun yoktur. Ancak, null değeri döndürülürse, döndürülen değeri yinelemeden önce null için bir denetim olmalıdır
JAB

Yanıtlar:


265

Bunu dene

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

1
Herkese teşekkürler ... bana nedenini sorma, ama tek yol şuydu: string [] arr = new String [0] as string [];
aquanat

2
Atish'in yöntemi işe yaradı ve görsel stüdyosunun if if deyiminde atarsam başlatılmayan bir değişkeni kullanma şikayeti ortadan kaldırıldı
Joe

1
Diğer seçenekc# Array.Empty<string>()
Jannick Breunis

68

Sözdiziminiz yanlış:

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

veya

string[] arr = new string[0];

1
Dize neden örneklerinizde hem büyük harfle yazılmıştır hem de büyük harfle yazılmamıştır?
Olmaz.

1
@newStackExchangeInstance, sorudan "olduğu gibi" kodunu kopyaladınız. Her iki satır da iyi derleniyor, ancak bir stili izlemenin daha iyi olduğunu kabul ediyorum.
Andrei

15

.Net 4.6 kullanıyorsanız, kullanabileceğiniz bazı yeni sözdizimleri vardır:

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

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

İyi numara! Ayrıca IList <T> ile çalışır: IList <string> x = Array.Empty <string> ();
ZunTzu


8

Dizilerin yapıcıları farklıdır. Boş bir dize dizisi oluşturmanın bazı yolları şunlardır:

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

(üzgünüm, mobilde)


1

Bu kıvırcık şeyleri hatırlamak bazen zor, bu yüzden mükemmel belgeler var :

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

Bu cevabı düzenlemeye gerek yoktur, çünkü cevaplar sözel soruya değil, genel bir amaca hizmet eder. "Bir diziyi bildirmek ve başlatmak için kullanılan sözdizimi nedir" yanıtını verir ve gönderdiğim bağlantıdan bir alıntıdır. OP yerini alabilir intile stringo hoşlanıyorsa.
CodeCaster

1

Sözdiziminiz geçersiz.

string[] arr = new string[5];

Bu arr, bu dizinin tüm öğelerinin bulunduğu başvurulan bir dizeler dizisi oluşturur null. (Dizeler referans türleri olduğundan )

Bu dizi elemanları içeren arr[0]etmek arr[4]. newOperatör dizi oluşturmak ve varsayılan değerlerine dizi öğeleri başlatmak için kullanılır. Bu örnekte, tüm dizi elemanları başlangıç ​​durumuna getirilmiştir null.

Single-Dimensional Arrays (C# Programming Guide)


Herkese teşekkürler ... bana nedenini sorma, ama tek yol şuydu: string [] arr = new String [0] as string [];
aquanat

0

Boş bir dizi oluşturmanız gerekiyorsa, bunu yapabilirsiniz:

string[] arr = new string[0];

Eğer boyutu hakkında bilmiyorsanız o zaman da kullanabilir List<string>kuyu gibi

var valStrings = new List<string>();

// do stuff...

string[] arrStrings = valStrings.ToArray();

Çok üzgünüm. Yanlış düzenlemelerle yayınınızı yanlışlıkla mahvettim.
Soner Gönül

-3

Aşağıdakiler iyi çalışmalıdır.

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

5
Boş bir dize olan bir öğe içerdiğinden, bu boş bir dizi değildir. arr.Length () 1 döndürecektir.
Guillermo Prandi

Bu boş bir dizi olmayabilir ama bu cevabı null güvenli buluyorum. Teşekkürler! 1 Yukarı!
hubert17
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.