如何检查泛型列表中的任何项是否为null或0



我使用下面的代码行来检查泛型列表中的任何项是否为空或0

if (Region.Dept.College[index].Student.Any(
    c => c.Age=null || 
        c.Name !=null || 
        c.code!=null || 
        c.Fees!=null || 
        c.Gender!=null || 
        c.M1!=null || 
        c.grade!= null || 
        c.caste!= null || 
        c.castespecified!= null || 
        c.GradeLevel!= null || 
        c.Gradelevelspecified!= null || 
        c.FeePercent!= 0 || 
        c.FeePercentSpecified != null || 
        c.StudentRegistrationID!= null)

但是,即使所有项都为空,它仍然进入if循环,这是不正确的。请帮我改正一下。

变量为样本

你想检查是否有任何学生有任何空属性(即c => c.Age==null || c.Name ==null || ..),如果是进入循环,所以它应该是:

if(!Region.Dept.College[index].Student.Any(condition))
{
  //loop code here, all students valid
}

当前您正在测试相反的情况-您正在测试是否任何学生是有效的,而不是如果所有都是有效的(这相当于没有任何无效)。还要检查您的空检查-根据数据类型您需要不同的检查,例如string.IsNullOrEmpty()用于字符串等。

我也认为c.Age=null只是一个打字错误,否则不会编译。

c => c.Age=null
应该

c => c.Age==null

你基本上将所有学生的Age赋值为null

看起来您错误地包括null ages

EDIT:虽然,我可能会卸载该验证返回布尔值的方法,然后在If中引用该方法。为了保持简洁,创建一个以对象为参数的函数,然后在该函数中执行所有这些验证并返回一个布尔值。比如AllValuesEmpty那么,您的谓词应该只是该函数的结果。

这是一个更好的实践,因为以后如果你想向对象添加一些东西,或者改变验证它是否为空的方式,你可以只改变一个方法,而不必搜索长而复杂的If条件。

EDIT2:还要注意,c#在NULL值之间区分任何值。其中NULL表示"没有任何可用于解决此问题的引用",empty表示"有此引用的空间,但没有任何有用的存储在那里"

也许你的属性是在对象的构造函数中用默认值初始化的。也许它们是empty而不是NULL

你有c => c.Age=null || ... -应该是c => c.Age != 0吗?

要确定哪个检查失败,请逐个执行,并在后面设置断点。

最新更新