Apa saja sintaks inisialisasi array yang dimungkinkan dengan C #?
Apa saja sintaks inisialisasi array yang dimungkinkan dengan C #?
Jawaban:
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 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 dengan new List<string> {"A", "B"}
itu menghasilkan sesuatu yang berbeda juga.
Sintaks pembuatan array dalam C # yang merupakan ekspresi adalah:
new int[3]
new int[3] { 10, 20, 30 }
new int[] { 10, 20, 30 }
new[] { 10, 20, 30 }
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:
int[] x = { 10, 20, 30 };
Elemen-elemen harus secara implisit dapat dikonversi ke tipe elemen. Ukuran ditentukan dari jumlah elemen yang diberikan.
tidak ada panduan lengkap
Saya merujuk Anda ke spesifikasi C # 4.0, bagian 7.6.10.4 "Ekspresi Pembuatan Array".
Array.CreateInstance(typeof(int), 3)
!
"1,2,3,4".split(',')
,.
new int[,] { { 3, 7 }, { 103, 107 }, { 10003, 10007 }, };
, dan seterusnya untuk int[,,]
, int[,,,]
, ...
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. Gunakan int[] data5 = { 1, 2, 3 }
sebagai gantinya.
var data6 = new int[0]
var data7 = new int[] { }
var data8 = new [] { }
dan int[] data9 = new [] { }
tidak bisa dikompilasi.
var data10 = { }
tidak dapat dikompilasi. Gunakan int[] data11 = { }
sebagai gantinya.
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 dikompilasi Foo(new int[0])
Foo(new int[] { })
Foo({})
tidak dapat dikompilasiEnumerable.Repeat(String.Empty, count).ToArray()
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.
var arr1 = Enumerable.Repeat(new object(), 10).ToArray();
Anda mendapatkan 10 referensi ke objek yang sama. Untuk membuat 10 objek berbeda, Anda bisa menggunakan var arr2 = Enumerable.Repeat(/* dummy: */ false, 10).Select(x => new object()).ToArray();
atau serupa.
var contacts = new[]
{
new
{
Name = " Eugene Zabokritski",
PhoneNumbers = new[] { "206-555-0108", "425-555-0001" }
},
new
{
Name = " Hanying Feng",
PhoneNumbers = new[] { "650-555-0199" }
}
};
Jika Anda ingin menginisialisasi array tetap elemen yang sama dengan inisialisasi (non- null
atau selain default
), gunakan ini:
var array = Enumerable.Repeat(string.Empty, 37).ToArray();
Juga silakan ambil bagian dalam diskusi ini .
Di bawah ini adalah definisi kelas.
public class DummyUser
{
public string email { get; set; }
public string language { get; set; }
}
Ini adalah bagaimana Anda dapat menginisialisasi array:
private DummyUser[] arrDummyUser = new DummyUser[]
{
new DummyUser{
email = "abc.xyz@email.com",
language = "English"
},
new DummyUser{
email = "def@email.com",
language = "Spanish"
}
};
Ulangi tanpa LINQ :
float[] floats = System.Array.ConvertAll(new float[16], v => 1.0f);
int[] array = new int[4];
array[0] = 10;
array[1] = 20;
array[2] = 30;
atau
string[] week = new string[] {"Sunday","Monday","Tuesday"};
atau
string[] array = { "Sunday" , "Monday" };
dan dalam array multi dimensi
Dim i, j As Integer
Dim strArr(1, 2) As String
strArr(0, 0) = "First (0,0)"
strArr(0, 1) = "Second (0,1)"
strArr(1, 0) = "Third (1,0)"
strArr(1, 1) = "Fourth (1,1)"
For Class initialization:
var page1 = new Class1();
var page2 = new Class2();
var pages = new UIViewController[] { page1, page2 };
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.
IUser[] userArray = new IUser[]
{
new DummyUser("abc@cde.edu", "Gibberish"),
new SmartyUser("pga@lna.it", "Italian", "Engineer")
};
Kelas untuk konteks:
interface IUser
{
string EMail { get; } // immutable, so get only an no set
string Language { get; }
}
public class DummyUser : IUser
{
public DummyUser(string email, string language)
{
m_email = email;
m_language = language;
}
private string m_email;
public string EMail
{
get { return m_email; }
}
private string m_language;
public string Language
{
get { return m_language; }
}
}
public class SmartyUser : IUser
{
public SmartyUser(string email, string language, string occupation)
{
m_email = email;
m_language = language;
m_occupation = occupation;
}
private string m_email;
public string EMail
{
get { return m_email; }
}
private string m_language;
public string Language
{
get { return m_language; }
}
private string m_occupation;
}
Untuk kelas di bawah ini:
public class Page
{
private string data;
public Page()
{
}
public Page(string data)
{
this.Data = data;
}
public string Data
{
get
{
return this.data;
}
set
{
this.data = value;
}
}
}
Anda dapat menginisialisasi array dari objek di atas seperti di bawah ini.
Pages = new Page[] { new Page("a string") };
Semoga ini membantu.
Anda juga dapat membuat array dinamis, yaitu pertama-tama Anda dapat menanyakan ukuran array dari pengguna sebelum membuatnya.
Console.Write("Enter size of array");
int n = Convert.ToInt16(Console.ReadLine());
int[] dynamicSizedArray= new int[n]; // Here we have created an array of size n
Console.WriteLine("Input Elements");
for(int i=0;i<n;i++)
{
dynamicSizedArray[i] = Convert.ToInt32(Console.ReadLine());
}
Console.WriteLine("Elements of array are :");
foreach (int i in dynamicSizedArray)
{
Console.WriteLine(i);
}
Console.ReadKey();
Solusi sepele dengan ekspresi. Perhatikan bahwa dengan NewArrayInit Anda dapat membuat array satu dimensi saja.
NewArrayExpression expr = Expression.NewArrayInit(typeof(int), new[] { Expression.Constant(2), Expression.Constant(3) });
int[] array = Expression.Lambda<Func<int[]>>(expr).Compile()(); // compile and call callback
Hanya sebuah catatan
Array berikut:
string[] array = new string[2];
string[] array2 = new string[] { "A", "B" };
string[] array3 = { "A" , "B" };
string[] array4 = new[] { "A", "B" };
Akan dikompilasi ke:
string[] array = new string[2];
string[] array2 = new string[]
{
"A",
"B"
};
string[] array3 = new string[]
{
"A",
"B"
};
string[] array4 = new string[]
{
"A",
"B"
};
var
variabel?