我使用下面的代码行来检查泛型列表中的任何项是否为空或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
吗?
要确定哪个检查失败,请逐个执行,并在后面设置断点。