我正在尝试编写一些逻辑来确定集合中某个对象的某个属性的所有值是否都是数字并且大于零。我可以很容易地使用ForEach编写这个,但是我想用Linq来做它。我试过这个:Linq to Objects - 为任何非数字数据查询对象
var result = entity.Reports.Any(
x =>
x.QuestionBlock == _question.QuestionBlock
&& (!string.IsNullOrEmpty(x.Data)) && Int32.TryParse(x.Data, out tempVal)
&& Int32.Parse(x.Data) > 0);
它不能正常工作。我也试过,希望Int32上的TryParse()在第一次遇到不能被解析为int的字符串时将返回false。但它看起来出来的参数将包含可以解析为一个int的第一个值字符串值。
var result = entity.GranteeReportDataModels.Any(
x =>
x.QuestionBlock == _question.QuestionBlock
&& (!string.IsNullOrEmpty(x.Data)) && Int32.TryParse(x.Data, out tempVal));
任何帮助,非常感谢!
如果'TryParse'返回false,'out'参数的值是未定义的。 – Jodrell 2013-05-03 14:58:00
如果'TryParse'返回'false',我相信out参数是0('int'的默认值),但这没有记录。实际上MSDN认为它返回“未初始化”,但这是不可能的,因为根据定义“out”意味着必须在函数返回之前设置一个值。反编译该方法显示,在实际完成任何工作之前,它实际上被设置为0。 – 2013-05-03 15:02:10
@BrianBall,我不会编写依赖于该代码的代码,但它可能是正常的。 – Jodrell 2013-05-03 15:08:54