2015-06-02 25 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); 
相关问题