一个方法接受大约7个字符串参数,并且需要检查它们是否为null 所有这些的基本方法都是简单的!string.IsNullOrWhitespace(param1)和 有没有更好或更聪明的方式? 另外,如果有帮助,我可以将参数包装在一个对象中!
答案 0 :(得分:6)
如果任何 null
将是 false :
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);
答案 1 :(得分: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 :(得分:1)
您可以将字符串传递到列表中,然后像这样检查:
if(List.All(x=>string.IsNullOrWhiteSpace(x)))
{
}
答案 3 :(得分:0)
如果您不需要检查空格,只需与null比较:
if (param1 != null)
传统上,如果要求输入不为空,则会抛出ArgumentNullException:
if (param1 == null)
throw new ArgumentNullException("param1");
答案 4 :(得分: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();