2015-06-02 53 views
2

一種方法接受約7個字符串參數,並且需要檢查它們是否爲空 對它們所做的基本方法很簡單!string.IsNullOrWhitespace(param1),同樣是 有沒有更好或更聰明的方法? 另外,如果有幫助的話,我可能會將參數包裝在一個對象中!以任何更好的方式檢查字符串null C#

+0

如果你考慮性能問題,那麼'str.Length == 0'是檢查null的最快方法 – gypsyCoder

+2

@gypsyCoder這是檢查空字符串而不是null的最快方法,因爲它會拋出一個'NullReferenceException '如果它是'null'。 – juharr

+0

如果str爲空,會不會崩潰? – Derek

回答

1

您可以將字符串傳遞到列表中,然後檢查像這樣:

if(List.All(x=>string.IsNullOrWhiteSpace(x))) 
{ 

} 
1

如果你正在尋找任何回報的一個字符串是不是空的,比這是一個很好的解決方案:

public static bool AreAllStringsEmpty(params string[] array) 
{ 
    return array.All(str => String.IsNullOrWhiteSpace(str)); 
} 

public static bool AreAllStringsFull(params string[] array) 
{ 
    return array.All(str => !String.IsNullOrWhiteSpace(str)); 
} 

public static bool AreAtleastOneStringFull(params string[] array) 
{ 
    return array.Any(str => !String.IsNullOrWhiteSpace(str)); 
} 

而不是像這樣使用:

AreAllStringsFull(param1, param2, ...); 

備註:您可以添加擴展方法來簡化過程,但它仍然是樣板代碼。

+2

這隻適用於**全** **空/空的情況。如果他想單獨檢查它們,以便它們都有某種東西,那麼這將會失敗。 (str1和str2 = empty,strN = something然後檢查通過) –

+0

@RonBeyer,編輯。 –

0

如果沒有需要檢查的空白只是比較空:

if (param1 != null) 

按照慣例,如果輸入的要求是不爲空,你會拋出一個ArgumentNullException

if (param1 == null) 
    throw new ArgumentNullException("param1"); 
0

你可以建立一個使用反射的擴展方法來一次檢查你的整個對象。但是,由於這會變得非常昂貴,因此可以使用FastMember之類的庫來最大限度地減少後續對象檢查的反射成本。

using System.Linq; 
using FastMember; 

namespace Utilities 
{ 
    public static class CheckStringProperties 
    { 
     public static bool AreAnyStringPropertiesNull<T>(this T model) where T : class 
     { 
      var accessor = TypeAccessor.Create(model.GetType()); 
      return AreAnyStringPropertiesNull(model, accessor); 
     } 

     public static bool AreAnyStringPropertiesNull<T>(this T model) where T : class 
     { 
      var accessor = TypeAccessor.Create(model.GetType()); 
      return AreAllStringPropertiesNull(model, accessor); 
     } 

     private static bool AreAnyStringPropertiesNull<T>(T model, TypeAccessor accessor) 
     { 
      foreach (var strng in GetStringProperties(accessor)) 
      { 
       if (string.IsNullOrWhiteSpace(strng)) 
        return true; 
      } 

      return false; 
     } 

     private static bool AreAllStringPropertiesNull<T>(T model, TypeAccessor accessor) 
     { 
      foreach (var strng in GetStringProperties(accessor)) 
      { 
       if (!string.IsNullOrWhiteSpace(strng)) 
        return true; 
      } 

      return false; 
     } 

     private static List<Member> GetStringProperties(TypeAccessor accessor) 
     { 
      return accessor.GetMembers().Where(x => x.Type == typeof(string)).ToList(); 
     } 
    } 
} 

然後你可以在你的類上調用擴展方法。

var containsNulls = classInstance.AreAnyStringPropertiesNull(); 
var areAllNull = classInstance.AreAllStringPropertiesNull(); 
6

如果任何null會爲你一個

bool CheckAnyNull(params string[] strs) 
{ 
    foreach (var str in strs) 
    { 
     if (strs.IsNullOrWhiteSpace(str)) 
      return true; 
    } 

    return false; 
} 

如果要檢查它們是否所有null

bool CheckAllNull(params string[] strs) 
{ 
    foreach (var str in strs) 
    { 
     if (!strs.IsNullOrWhiteSpace(str)) 
      return false; 
    } 

    return true; 
} 

如果你想要一個特定的null字符串

int CheckNullCount(params string[] strs) 
{ 
    int count; 
    foreach (var str in strs) 
    { 
     if (strs.IsNullOrWhiteSpace(str)) 
      count++; 
    } 

    return count; 
} 

他們都然後可以這樣調用:

CheckAnyNulls(str1, str2, str3, str4, str5, str6, str7); 
CheckAllNulls(str1, str2, str3, str4, str5, str6, str7); 
int nullStrs = CheckNullCount(str1, str2, str3, str4, str5, str6, str7); 

或:

var strs = new string[7]; 
// populate the strs array. 
CheckAnyNulls(strs); 
CheckAllNulls(strs); 
int nullStrs = CheckNullCount(strs); 
相關問題