Ini adalah deklarasi dan metode inisialisasi saat ini untuk array sederhana.
string[] array = new string[2]; // creates array of length 2, default values
string[] array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
string[] array = new[] { "A", "B" }; // created populated array of length 2
Perhatikan bahwa ada teknik lain untuk mendapatkan array, seperti ToArray()
ekstensi Linq aktif IEnumerable<T>
.
Perhatikan juga bahwa dalam deklarasi di atas, dua yang pertama dapat menggantikan yang string[]
di sebelah kiri dengan var
(C # 3+), karena informasi di sebelah kanan sudah cukup untuk menyimpulkan jenis yang tepat. Baris ketiga harus ditulis seperti yang ditampilkan, karena sintaks inisialisasi array saja tidak cukup untuk memenuhi tuntutan kompiler. Yang keempat juga bisa menggunakan inferensi. Jadi, jika Anda tertarik dengan keseluruhan singkatnya, hal di atas dapat ditulis sebagai
var array = new string[2]; // creates array of length 2, default values
var array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
var array = new[] { "A", "B" }; // created populated array of length 2
var
variabel?var x = {}
tidak berfungsi jika penginisialisasi array dapat menghasilkan apa pun selain array, tapi saya tidak akan tahu apa itu. Jadi saya kira penginisialisasi array adalah fitur bahasa. Jika Anda menggunakannya dengannew List<string> {"A", "B"}
itu menghasilkan sesuatu yang berbeda juga.Sintaks pembuatan array dalam C # yang merupakan ekspresi adalah:
Dalam yang pertama, ukurannya bisa berupa nilai integral non-negatif dan elemen array diinisialisasi ke nilai default.
Dalam yang kedua, ukurannya harus konstan dan jumlah elemen yang diberikan harus cocok. Harus ada konversi implisit dari elemen yang diberikan ke tipe elemen array yang diberikan.
Pada yang ketiga, elemen harus secara implisit dapat dikonversi ke tipe elemen, dan ukurannya ditentukan dari jumlah elemen yang diberikan.
Pada yang keempat jenis elemen array disimpulkan dengan menghitung tipe terbaik, jika ada, dari semua elemen yang diberikan yang memiliki tipe. Semua elemen harus secara implisit dapat dikonversi ke tipe itu. Ukuran ditentukan dari jumlah elemen yang diberikan. Sintaks ini diperkenalkan di C # 3.0.
Ada juga sintaks yang hanya dapat digunakan dalam deklarasi:
Elemen-elemen harus secara implisit dapat dikonversi ke tipe elemen. Ukuran ditentukan dari jumlah elemen yang diberikan.
Saya merujuk Anda ke spesifikasi C # 4.0, bagian 7.6.10.4 "Ekspresi Pembuatan Array".
sumber
Array.CreateInstance(typeof(int), 3)
!"1,2,3,4".split(',')
,.new int[,] { { 3, 7 }, { 103, 107 }, { 10003, 10007 }, };
, dan seterusnya untukint[,,]
,int[,,,]
, ...Array tidak kosong
var data0 = new int[3]
var data1 = new int[3] { 1, 2, 3 }
var data2 = new int[] { 1, 2, 3 }
var data3 = new[] { 1, 2, 3 }
var data4 = { 1, 2, 3 }
tidak dapat dikompilasi. Gunakanint[] data5 = { 1, 2, 3 }
sebagai gantinya.Array kosong
var data6 = new int[0]
var data7 = new int[] { }
var data8 = new [] { }
danint[] data9 = new [] { }
tidak bisa dikompilasi.var data10 = { }
tidak dapat dikompilasi. Gunakanint[] data11 = { }
sebagai gantinya.Sebagai argumen dari suatu metode
Hanya ekspresi yang dapat ditetapkan dengan
var
kata kunci yang dapat dilewatkan sebagai argumen.Foo(new int[2])
Foo(new int[2] { 1, 2 })
Foo(new int[] { 1, 2 })
Foo(new[] { 1, 2 })
Foo({ 1, 2 })
tidak dapat dikompilasiFoo(new int[0])
Foo(new int[] { })
Foo({})
tidak dapat dikompilasisumber
Akan membuat array string kosong yang diulang 'hitung' kali. Jika Anda ingin menginisialisasi array dengan nilai elemen default yang sama namun khusus. Hati-hati dengan tipe referensi, semua elemen akan merujuk objek yang sama.
sumber
var arr1 = Enumerable.Repeat(new object(), 10).ToArray();
Anda mendapatkan 10 referensi ke objek yang sama. Untuk membuat 10 objek berbeda, Anda bisa menggunakanvar arr2 = Enumerable.Repeat(/* dummy: */ false, 10).Select(x => new object()).ToArray();
atau serupa.sumber
Jika Anda ingin menginisialisasi array tetap elemen yang sama dengan inisialisasi (non-
null
atau selaindefault
), gunakan ini:Juga silakan ambil bagian dalam diskusi ini .
sumber
Contoh untuk membuat larik kelas kustom
Di bawah ini adalah definisi kelas.
Ini adalah bagaimana Anda dapat menginisialisasi array:
sumber
Ulangi tanpa LINQ :
sumber
atau
atau
dan dalam array multi dimensi
sumber
sumber
Cara lain untuk membuat dan menginisialisasi array objek. Ini mirip dengan contoh yang @Amol telah diposting di atas , kecuali yang ini menggunakan konstruktor. Sedikit polimorfisme muncul, aku tidak tahan.
Kelas untuk konteks:
sumber
Untuk kelas di bawah ini:
Anda dapat menginisialisasi array dari objek di atas seperti di bawah ini.
Semoga ini membantu.
sumber
Anda juga dapat membuat array dinamis, yaitu pertama-tama Anda dapat menanyakan ukuran array dari pengguna sebelum membuatnya.
sumber
Solusi sepele dengan ekspresi. Perhatikan bahwa dengan NewArrayInit Anda dapat membuat array satu dimensi saja.
sumber
Hanya sebuah catatan
Array berikut:
Akan dikompilasi ke:
sumber