如何在c#中检查对象是不是没有空属性[重复]

Posted

技术标签:

【中文标题】如何在c#中检查对象是不是没有空属性[重复]【英文标题】:How to check if an object has no null properties in c# [duplicate]如何在c#中检查对象是否没有空属性[重复] 【发布时间】:2019-08-31 22:38:36 【问题描述】:

我正在编写一个看起来像这样的路由函数:

    public IHttpActionResult SomeRoute([FromBody] PostedData postedData)

FromBody 属性会将发布到路由中的数据转换为指定的类型,并将无法以这种方式强制转换的任何属性设置为 null。

我要做的是检查发布的数据上是否有任何空属性(上例中的postedData)。因为我知道类型,我可以手动检查每一个,但我希望能够以更通用的方式实现这样的检查,我想知道这是否可能。

【问题讨论】:

这可能不是重复的,但肯定是正确的开始路径。 因为看起来您正在使用 WebApi,所以惯用的方法是使用 [Required] 之类的属性装饰您的 PostData 视图模型的属性,然后您将能够检测到 null(并且其他无效数据)通过ModelState 我不得不说,如果应该关闭它,那应该是因为它太宽泛了,因为它肯定不是它被标记的问题的重复。鉴于标记为重复的问题问How to iterate an objects properties,我的问题可能最好问为I have an array of properties, how do I check whether any of them are null,但这并不意味着这是重复的 @StuartLC 这听起来很有用;我会调查一下,谢谢 @kenny 我同意这不是重复的,但 c# 社区的其他成员似乎不同意 【参考方案1】:

您可以结合使用反射和System.Linq.Expressions 来生成一个接受PostedData 的lambda,并检查每个属性是否为空。正确处理有点棘手,但与仅使用反射来查询属性相比,它会为您提供最佳性能。

【讨论】:

谢谢肖恩,我会将其标记为正确答案,因为它已被标记为重复。

以上是关于如何在c#中检查对象是不是没有空属性[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中快速检查两个数据传输对象是不是具有相同的属性?

如何在C#中检查我的互联网是不是超时[重复]

如何检查对象数组是不是具有重复的属性值?

如何检查 C# 中的动态匿名类型上是不是存在属性?

检查对象是不是具有属性[重复]

如何在oracle中检查对象是不是存在[重复]