C#递归检查所有不为空的值

问题描述 投票:0回答:2

[不想重新发明轮子,是否有一个dotnet nuget库可以对对象进行递归检查以进行参数检查?

如果没有,我将如何转换代码以检查属性是否为null,以及是否可以保留其自身属性的类型,则递归检查该类型,并以属性名称列表结束。] >

public static class Assert
{
    public static void AllPropertiesNotNull<T>(T obj)
    {
        if (obj == null)
            throw new ArgumentNullException(nameof(obj));

        var emptyProperties = typeof(T)
                                .GetProperties()
                                .Select(prop => new { Prop = prop, Val = prop.GetValue(obj, null) })
                                .Where(val => IsEmpty((dynamic)val.Val))
                                .Select(val => val.Prop.Name)
                                .ToList();

        if (emptyProperties.Count > 0)
            throw new ArgumentNullException(emptyProperties.First());
    }

    private static bool IsEmpty(object o) { return o == null; }
}

[不想重新发明轮子,是否有一个dotnet nuget库可以对对象进行递归检查以进行参数检查?如果没有,我将如何转换代码以检查属性是否为...

c# .net reflection
2个回答
0
投票

为此,编写一种方法来检查当前对象的属性,并在非null属性上递归调用它。我继续写了一些代码,其中包括循环使用字典和可枚举并检查它们是否为空,同时考虑到@dcg提到的循环引用。


0
投票

您可以为对象创建扩展方法ThorwOnNullProperty,并像这样使用它:

something.ThorwOnNullProperty();
© www.soinside.com 2019 - 2024. All rights reserved.