c#中更好的检查字符串null的方法
本文关键字:null 方法 字符串 检查 更好 | 更新日期: 2023-09-27 17:52:38
一个方法接受大约7个字符串参数,需要检查它们是否为空所有这些的基本方法都是简单的!string.IsNullOrWhitespace(param1),类似的有没有更好或更聪明的方法?此外,如果有帮助的话,我可以将参数包装在对象中!
In case any null
将是false for you:
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);
您可以将字符串传递给list,然后像这样检查:
if(List.All(x=>string.IsNullOrWhiteSpace(x)))
{
}
如果您希望返回任何一个不为空的字符串,那么这是一个很好的解决方案:
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, ...);
备注:您可以添加扩展方法来简化过程,但它仍然是样板代码
如果您不需要检查空白,只需比较null:
if (param1 != null)
通常,如果要求输入不为空,则会抛出ArgumentNullException:
if (param1 == null)
throw new ArgumentNullException("param1");
您可以使用反射构建一个扩展方法来一次检查整个对象。然而,由于这样做的代价很高,您可以使用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();