Apakah penggunaan string.IsNullOrEmpty(string)
saat memeriksa string dianggap sebagai praktik buruk ketika ada string.IsNullOrWhiteSpace(string)
di .NET 4.0 dan di atasnya?
Praktik terbaik adalah memilih yang paling tepat.
.Net Framework 4.0 Beta 2 memiliki metode IsNullOrWhiteSpace () baru untuk string yang menggeneralisasi metode IsNullOrEmpty () untuk juga memasukkan ruang putih lain selain string kosong.
Istilah "ruang putih" mencakup semua karakter yang tidak terlihat di layar. Misalnya, spasi, pemisah baris, tab, dan string kosong adalah karakter spasi putih * .
Referensi: Di Sini
Untuk kinerja, IsNullOrWhiteSpace tidak ideal tetapi bagus. Panggilan metode akan menghasilkan penalti kinerja kecil. Lebih lanjut, metode IsWhiteSpace itu sendiri memiliki beberapa tipuan yang dapat dihapus jika Anda tidak menggunakan data Unicode. Seperti biasa, optimasi prematur mungkin jahat, tetapi juga menyenangkan.
Referensi: Di Sini
Periksa kode sumber (Sumber Referensi .NET Framework 4.6.2)
[Pure]
public static bool IsNullOrEmpty(String value) {
return (value == null || value.Length == 0);
}
[Pure]
public static bool IsNullOrWhiteSpace(String value) {
if (value == null) return true;
for(int i = 0; i < value.Length; i++) {
if(!Char.IsWhiteSpace(value[i])) return false;
}
return true;
}
Contohnya
string nullString = null;
string emptyString = "";
string whitespaceString = " ";
string nonEmptyString = "abc123";
bool result;
result = String.IsNullOrEmpty(nullString); // true
result = String.IsNullOrEmpty(emptyString); // true
result = String.IsNullOrEmpty(whitespaceString); // false
result = String.IsNullOrEmpty(nonEmptyString); // false
result = String.IsNullOrWhiteSpace(nullString); // true
result = String.IsNullOrWhiteSpace(emptyString); // true
result = String.IsNullOrWhiteSpace(whitespaceString); // true
result = String.IsNullOrWhiteSpace(nonEmptyString); // false
return String.IsNullOrEmpty(value) || value.Trim().Length == 0;
, yang melibatkan alokasi string baru dan dua pemeriksaan terpisah. Kemungkinan besar di dalam IsNullOrWhitespace dilakukan melalui pass tunggal tanpa alokasi dengan memeriksa bahwa masing-masing karakter dalam string adalah spasi, maka kinerja yang superior. Apa yang sebenarnya membingungkan Anda?IsNullOrWhitespace()
akan cocok dengan string kosong. IntinyaIsNullOrEmpty()
cocok dengan subset dariIsNullOrWhitespace()
.Perbedaan dalam praktik:
sumber
Mereka adalah fungsi yang berbeda. Anda harus memutuskan untuk situasi Anda apa yang Anda butuhkan.
Saya tidak menganggap menggunakan salah satu dari mereka sebagai praktik yang buruk. Sebagian besar waktu
IsNullOrEmpty()
sudah cukup. Tapi Anda punya pilihan :)sumber
Contains
. Jika Anda ingin memastikan bahwa nama pengguna tidak bisa terdiri dari ruang hanya -IsNullOrWhiteSpace
ok.IsNullOrEmpty
memastikan hanya nama pengguna yang dimasukkan.Berikut ini adalah implementasi sebenarnya dari kedua metode (didekompilasi menggunakan dotPeek)
sumber
IsNullOrWhiteSpace
benarstring.Empty
juga! Itu bonus :)Ia mengatakan itu semua
IsNullOrEmpty()
tidak termasuk spasi putih sementaraIsNullOrWhiteSpace()
!IsNullOrEmpty()
Jika string:-Null
-Empty
IsNullOrWhiteSpace()
Jika string:-Null
-Empty
-Berisi Ruang Putih Saja
sumber
Lihat ini dengan IsNullOrEmpty dan IsNullOrwhiteSpace
Anda akan melihat bahwa IsNullOrWhiteSpace jauh lebih lambat: /
sumber
string.IsNullOrEmpty (str) - jika Anda ingin memeriksa nilai string telah disediakan
string.IsNullOrWhiteSpace (str) - pada dasarnya ini sudah semacam implementasi logika bisnis (yaitu mengapa "" buruk, tetapi sesuatu seperti "~~" baik).
Saran saya - jangan gabungkan logika bisnis dengan pemeriksaan teknis. Jadi, misalnya, string.IsNullOrEmpty adalah yang terbaik untuk digunakan di awal metode untuk memeriksa parameter input mereka.
sumber
Bagaimana dengan ini untuk menangkap semua ...
Ini akan memangkas semua ruang jika ada di sana menghindari hukuman kinerja IsWhiteSpace, yang akan memungkinkan string untuk memenuhi kondisi "kosong" jika bukan nol.
Saya juga berpikir ini lebih jelas dan umumnya merupakan praktik yang baik untuk memangkas string, terutama jika Anda memasukkannya ke dalam database atau sesuatu.
sumber
Dalam. Net standard 2.0:
sumber