C # 'da bir dizi değişmez değeri nasıl döndürülür


89

Aşağıdaki kodu deniyorum. Hatalı çizgi gösteriliyor.

int[] myfunction()
{
    {
      //regular code
    }
    catch (Exception ex)
    {                    
       return {0,0,0}; //gives error
    }
}

Dize değişmezleri gibi bir dizi değişmezi nasıl döndürürüm?


4
Ayrıca C # 'ın gerçekte dizi değişmez değerlerine sahip olmaması, ancak kabul edilen yanıtın başvurduğu bir dizi başlatma sözdizimine de değmez. Değişmezler, doğrudan serileştirilebilmeleri ve constalanlara atanabilmeleri açısından özeldir . Dizi başlatma sözdiziminde durum böyle değildir.
cwharris

Yanıtlar:


167

Bunun intgibi bir dizi döndür :

return new int [] { 0, 0, 0 };

Ayrıca diziyi örtük olarak da yazabilirsiniz - derleyici int[], yalnızca intdeğerleri içerdiği için olması gerektiği sonucuna varacaktır :

return new [] { 0, 0, 0 };

6
Woah ho, dizileri örtük olarak yazabileceğinizi bilmiyordum! +1
Chris Sinclair

1
Bunun new int [] {0,0,0}da işe yaradığını buldum . Bence daha açık olur.
sgarg

3
@sgarg Bu yanıtla aynı görünüyor. Ve katılmıyorum, dizinin örtük olarak yazılması, sabitlerin kayan noktaya değiştirilmesinin otomatik olarak doğru dizi türünü alacağı anlamına gelir.
NetMage

13

Blorgbeard doğrudur, ancak yeni .NET 4.0 Tuple sınıfını kullanmayı da düşünebilirsiniz. İade edilecek belirli sayıda ürününüz olduğunda çalışmanın daha kolay olduğunu gördüm. Sanki dizinizde her zaman 3 öğe döndürmeniz gerekiyorsa, 3-int tuple bunun ne olduğunu netleştirir.

return new Tuple<int,int,int>(0,0,0);

ya da sadece

return Tuple.Create(0,0,0);

2
Değişken sayıda öğeniz varsa ancak bazı ekstra işlevler istiyorsanız şunları da yapabilirsiniz:return new List<int>(new int[]{0,0,0});
Dave

1
@Dave List<int>(Enumerable.Repeat(0, 3))daha iyi olmaz mıydı ?
NetMage

@NetMage Öğelerin sayısını kesinlikle değiştirmek isteseniz daha iyi olur.
Dave

10

dizinin boyutu sabitse ve sıfırlarla dolu yeni bir tane döndürmek istiyorsanız

return new int[3];
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.