以更好的方式检查字符串null C#

时间:2015-06-02 17:31:27

标签: c#

一个方法接受大约7个字符串参数,并且需要检查它们是否为null 所有这些的基本方法都是简单的!string.IsNullOrWhitespace(param1)和 有没有更好或更聪明的方式? 另外,如果有帮助,我可以将参数包装在一个对象中!

5 个答案:

答案 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();
相关问题