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.