Yanıtlar:
En iyi uygulama, en uygun olanı seçmektir.
Net Framework 4.0 Beta 2'de, boş dizenin yanı sıra diğer beyaz boşlukları da içerecek şekilde IsNullOrEmpty () yöntemini genelleyen yeni bir IsNullOrWhiteSpace () yöntemi vardır.
“Beyaz boşluk” terimi, ekranda görünmeyen tüm karakterleri içerir. Örneğin, boşluk, satır sonu, sekme ve boş dize beyaz boşluk karakterlerdir * .
Referans: Burada
Performans için IsNullOrWhiteSpace ideal değil ama iyidir. Yöntem çağrıları küçük bir performans cezasına neden olur. Ayrıca, IsWhiteSpace yönteminin kendisi Unicode verilerini kullanmıyorsanız kaldırılabilecek bazı indirgemelere sahiptir. Her zaman olduğu gibi, erken optimizasyon kötü olabilir, ancak aynı zamanda eğlencelidir.
Referans: Burada
Kaynak kodunu kontrol edin (Reference Source .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;
}
Örnekler
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;
, yeni dize ataması ve iki ayrı denetim içeren koddur . Büyük olasılıkla IsNullOrWhitespace içinde, dizedeki her karakterin boşluk, dolayısıyla üstün performans olup olmadığını kontrol ederek herhangi bir tahsis olmaksızın tek geçişle yapılır. Aslında sizi ne karıştırıyor?
IsNullOrWhitespace()
Boş bir dizeyle eşleşip eşleşmeyeceğini asla bilmiyordum . Özünde IsNullOrEmpty()
bir alt kümeyle eşleşir IsNullOrWhitespace()
.
Uygulamadaki farklılıklar:
string testString = "";
Console.WriteLine(string.Format("IsNullOrEmpty : {0}", string.IsNullOrEmpty(testString)));
Console.WriteLine(string.Format("IsNullOrWhiteSpace : {0}", string.IsNullOrWhiteSpace(testString)));
Console.ReadKey();
Result :
IsNullOrEmpty : True
IsNullOrWhiteSpace : True
**************************************************************
string testString = " MDS ";
IsNullOrEmpty : False
IsNullOrWhiteSpace : False
**************************************************************
string testString = " ";
IsNullOrEmpty : False
IsNullOrWhiteSpace : True
**************************************************************
string testString = string.Empty;
IsNullOrEmpty : True
IsNullOrWhiteSpace : True
**************************************************************
string testString = null;
IsNullOrEmpty : True
IsNullOrWhiteSpace : True
Bunlar farklı işlevlerdir. Durumunuz için neye ihtiyacınız olduğuna karar vermelisiniz.
Hiçbirini kötü bir uygulama olarak görmüyorum. Çoğu zaman IsNullOrEmpty()
yeterlidir. Ama seçimin var :)
Contains
. Kullanıcı adının yalnızca boşluktan oluşmasını önlemek istiyorsanız - IsNullOrWhiteSpace
sorun değil. IsNullOrEmpty
yalnızca kullanıcı adının bir şekilde girilmesini sağlar.
İşte her iki yöntemin gerçek uygulaması (dotPeek kullanılarak ayrıştırılmış)
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public static bool IsNullOrEmpty(string value)
{
if (value != null)
return value.Length == 0;
else
return true;
}
/// <summary>
/// Indicates whether a specified string is null, empty, or consists only of white-space characters.
/// </summary>
///
/// <returns>
/// true if the <paramref name="value"/> parameter is null or <see cref="F:System.String.Empty"/>, or if <paramref name="value"/> consists exclusively of white-space characters.
/// </returns>
/// <param name="value">The string to test.</param>
public static bool IsNullOrWhiteSpace(string value)
{
if (value == null)
return true;
for (int index = 0; index < value.Length; ++index)
{
if (!char.IsWhiteSpace(value[index]))
return false;
}
return true;
}
IsNullOrWhiteSpace
ki string.Empty
! Bu bir bonus :)
Her şeyin IsNullOrEmpty()
beyaz boşluk içermediğini söylüyor IsNullOrWhiteSpace()
!
IsNullOrEmpty()
Dize ise:
-Null
-boş
IsNullOrWhiteSpace()
Dize ise:
-Null
-boş
Sadece -Var Beyaz Spaces
IsNullOrEmpty ve IsNullOrwhiteSpace ile bunu kontrol edin
string sTestes = "I like sweat peaches";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
for (int i = 0; i < 5000000; i++)
{
for (int z = 0; z < 500; z++)
{
var x = string.IsNullOrEmpty(sTestes);// OR string.IsNullOrWhiteSpace
}
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// Format and display the TimeSpan value.
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
ts.Milliseconds / 10);
Console.WriteLine("RunTime " + elapsedTime);
Console.ReadLine();
IsNullOrWhiteSpace'in çok daha yavaş olduğunu göreceksiniz: /
string.IsNullOrEmpty (str) - dize değerinin sağlandığını kontrol etmek istiyorsanız
string.IsNullOrWhiteSpace (str) - temelde bu zaten bir tür iş mantığı uygulamasıdır (yani "" neden kötü, ancak "~~" gibi bir şey iyidir).
Benim tavsiyem - iş mantığını teknik kontrollerle karıştırmayın. Örneğin, string.IsNullOrEmpty, giriş parametrelerini kontrol etmek için yöntemlerin başında kullanmak için en iyisidir.
Tüm bunlar için ne dersiniz ...
if (string.IsNullOrEmpty(x.Trim())
{
}
Bu, eğer varsa, boş değilse "boş" koşulunu karşılayabilmesini sağlayan IsWhiteSpace'in performans cezasından kaçınarak tüm alanları keser.
Ben de bu daha net olduğunu düşünüyorum ve özellikle de onları bir veritabanına falan koyuyorsanız dizeleri kırpmak için genellikle iyi bir uygulama.
Net standard 2.0'da:
string.IsNullOrEmpty()
: Belirtilen dizenin boş veya Boş dizgi olduğunu belirtir.
Console.WriteLine(string.IsNullOrEmpty(null)); // True
Console.WriteLine(string.IsNullOrEmpty("")); // True
Console.WriteLine(string.IsNullOrEmpty(" ")); // False
Console.WriteLine(string.IsNullOrEmpty(" ")); // False
string.IsNullOrWhiteSpace()
: Belirtilen bir dizenin boş, boş veya yalnızca boşluk karakterlerinden oluşup oluşmadığını gösterir.
Console.WriteLine(string.IsNullOrWhiteSpace(null)); // True
Console.WriteLine(string.IsNullOrWhiteSpace("")); // True
Console.WriteLine(string.IsNullOrWhiteSpace(" ")); // True
Console.WriteLine(string.IsNullOrWhiteSpace(" ")); // True