Secara umum, Anda harus selalu menggunakan tipe data yang paling spesifik untuk data Anda.
Jika, misalnya, Anda menggunakan Entity Framework untuk menarik data dari database, EF akan secara otomatis menggunakan tipe data yang paling dekat dengan yang digunakan dalam database.
Ada dua masalah dengan ini di C #.
Pertama, sebagian besar pengembang C # hanya menggunakan int
, untuk mewakili bilangan bulat (kecuali ada alasan untuk menggunakannya long
). Ini berarti bahwa pengembang lain tidak akan berpikir untuk memeriksa tipe data, sehingga mereka akan mendapatkan kesalahan limpahan yang disebutkan di atas. Kedua, dan isu yang lebih penting, adalah / adalah bahwa NET operator aritmatika asli hanya didukung int
, uint
, long
, ulong
, float
, ganda, dan decimal
*. Ini masih terjadi sampai sekarang (lihat bagian 7.8.4 dalam spesifikasi bahasa C # 5.0 ). Anda dapat mengujinya sendiri menggunakan kode berikut:
byte a, b;
a = 1;
b = 2;
var c = a - b; //In visual studio, hover over "var" and the tip will indicate the data type, or you can get the value from cName below.
string cName = c.GetType().Namespace + '.' + c.GetType().Name;
Hasil dari byte
- byte
adalah int
( System.Int32
).
Kedua masalah ini memunculkan praktik "hanya gunakan int untuk bilangan bulat" yang sangat umum.
Jadi untuk menjawab pertanyaan Anda, dalam C # biasanya merupakan ide yang baik untuk tetap int
kecuali:
- Pembuat kode otomatis menggunakan nilai yang berbeda (seperti Entity Framework).
- Semua pengembang lain di proyek menyadari bahwa Anda menggunakan tipe data yang kurang umum (sertakan komentar yang menunjukkan bahwa Anda menggunakan tipe data dan alasannya).
- Tipe data yang kurang umum sudah umum digunakan dalam proyek.
- Program ini membutuhkan manfaat dari tipe data yang kurang umum (Anda memiliki 100 juta dari ini yang perlu Anda simpan dalam RAM, sehingga perbedaan antara a
byte
dan a int
atau a int
dan a long
sangat penting, atau perbedaan aritmatika dari unsigned sudah disebutkan sebelumnya).
Jika Anda perlu melakukan perhitungan matematika pada data, patuhi jenis yang umum.
Ingat, Anda dapat melakukan cast dari satu tipe ke tipe lainnya. Ini bisa kurang efisien dari sudut pandang CPU, jadi Anda mungkin lebih baik dengan salah satu dari 7 tipe umum, tetapi ini merupakan opsi jika diperlukan.
Pencacahan ( enum
) adalah salah satu pengecualian pribadi saya untuk pedoman di atas. Jika saya hanya memiliki beberapa opsi, saya akan menentukan enum sebagai byte atau pendek. Jika saya membutuhkan bit terakhir dalam enum yang ditandai, saya akan menentukan jenisnya uint
sehingga saya dapat menggunakan hex untuk mengatur nilai untuk flag.
Jika Anda menggunakan properti dengan kode pembatasan nilai, pastikan untuk menjelaskan dalam tag ringkasan batasan apa yang ada dan mengapa.
* Alias C # digunakan sebagai ganti nama .NET seperti System.Int32
karena ini adalah pertanyaan C #.
Catatan: ada blog atau artikel dari pengembang .NET (yang tidak dapat saya temukan), yang menunjukkan terbatasnya fungsi aritmatika dan beberapa alasan mengapa mereka tidak khawatir tentang hal itu. Seingat saya, mereka mengindikasikan bahwa mereka tidak punya rencana untuk menambahkan dukungan untuk tipe data lainnya.
Catatan: Java tidak mendukung tipe data yang tidak ditandatangani dan sebelumnya tidak memiliki dukungan untuk angka bulat 8 atau 16 bit. Karena banyak pengembang C # berasal dari latar belakang Java atau diperlukan untuk bekerja dalam kedua bahasa, keterbatasan satu bahasa terkadang secara artifisial dipaksakan pada yang lain.