[英]Check if any property of class is null
我有以下课程: -
public class Requirements
{
public string EventMessageUId { get; set; }
public string ProjectId { get; set; }
public List<Message> Message { get; set; }
}
我正在把它映射到Json: -
Requirements objRequirement = JsonObject.ToObject<Requirements>();
我想在上面的映射之后检查类的任何属性是否没有值或者是否为null。
为此,我试过: -
bool isNull= objRequirement.GetType().GetProperties().All(p => p != null);
但是在调试的过程中,我发现每次属性都是否为Null时它是否为true。
请帮助我如何通过Avoioding For/foreach
循环实现这一Avoioding For/foreach
。
您正在检查属性本身是否为null(永远不会为真),而不是属性的值。 请改用:
bool isNull = objRequirement.GetType().GetProperties()
.All(p => p.GetValue(objRequirement) != null);
这可能对你有所帮助
objRequirement.GetType().GetProperties()
.Where(pi => pi.GetValue(objRequirement) is string)
.Select(pi => (string) pi.GetValue(objRequirement))
.Any(value => String.IsNullOrEmpty(value));
我使用对象的下面扩展,我用它来验证我不希望所有属性为null或为空的对象,以便保存对数据库的一些调用。 我认为它适合你的情况以及更多。
/// <summary>
/// Returns true is all the properties of the object are null, empty or "smaller or equal to" zero (for int and double)
/// </summary>
/// <param name="obj">Any type of object</param>
/// <returns></returns>
public static bool IsObjectEmpty(this object obj)
{
if (Object.ReferenceEquals(obj, null))
return true;
return obj.GetType().GetProperties()
.All(x => IsNullOrEmpty(x.GetValue(obj)));
}
/// <summary>
/// Checks if the property value is null, empty or "smaller or equal to" zero (for numeric types)
/// </summary>
/// <param name="value">The property value</param>
/// <returns></returns>
private static bool IsNullOrEmpty(object value)
{
if (Object.ReferenceEquals(value, null))
return true;
if (value.GetType().GetTypeInfo().IsClass)
return value.IsObjectEmpty();
if (value is string || value is char || value is short)
return string.IsNullOrEmpty((string) value);
if (value is int)
return ((int) value) <= 0;
if (value is double)
return ((double) value) <= 0;
if (value is decimal)
return ((decimal) value) <= 0;
if (value is DateTime)
return false;
// ........
// Add all other cases that we may need
// ........
if (value is object)
return value.IsObjectEmpty();
var type = value.GetType();
return type.IsValueType
&& Object.Equals(value, Activator.CreateInstance(type));
}
调用显然是obj.IsObjectEmpty()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.