【发布时间】:2021-01-17 21:18:36
【问题描述】:
else{
if(a.Item2 == ">"){
result = dict.Where(x => x.Value.Any(y => y.Key == a.Item1 && double.TryParse(y.Value,out double res) == double.TryParse(a.Item3,out double res1)));
//result = dict.Where(x => x.Value.Any(y => y.Key == a.Item1 && Convert.ToDouble(y.Value) > Convert.ToDouble(a.Item3)));
}
else if(a.Item2 == "<")
result = dict.Where(x => x.Value.Any(y => y.Key == a.Item1 && Convert.ToDouble(y.Value) < Convert.ToDouble(a.Item3)));
else if(a.Item2 == "<=")
result = dict.Where(x => x.Value.Any(y => y.Key == a.Item1 && Convert.ToDouble(y.Value) <= Convert.ToDouble(a.Item3)));
else if(a.Item2 == ">=")
result = dict.Where(x => x.Value.Any(y => y.Key == a.Item1 && Convert.ToDouble(y.Value) >= Convert.ToDouble(a.Item3)));
else if(a.Item2 == "==")
result = dict.Where(x => x.Value.Any(y => y.Key == a.Item1 && Convert.ToDouble(y.Value) == Convert.ToDouble(a.Item3)));
else if(a.Item2 == "!=")
result = dict.Where(x => x.Value.Any(y => y.Key == a.Item1 && Convert.ToDouble(y.Value) != Convert.ToDouble(a.Item3)));
else
throw new Exception("Comparison operator not found");
}
如何在上述代码情况下使用double.TryParse 代替Convert.ToDouble,因为我不知道如何使用输出值进行比较。我想使用TryParse,因为我收到以下错误消息:
输入的字符串格式不正确
我如何在当前的情景中实现这一目标?
【问题讨论】:
-
TryParse返回false应该是什么结果? -
out变量在调用相应方法后即可使用。所以只需在末尾添加一个&& res == res1(请记住,尽管您必须在查询中修复更多内容,例如您使用 assingment 运算符=而不是相等比较==。虽然您可能想要使用&&运算符来验证两个解析是否成功)。此外,TryParse不会修复不正确的输入字符串,但不会抛出异常,而是会返回false并将out参数设置为默认值。 -
所以它可能看起来像这样(实际的实现可能会有所不同,因为它并不完全清楚你在寻找什么功能):
y => y.Key == a.Item1 && double.TryParse(y.Value, out double res) && double.TryParse(a.Item3, out double res1) && res == res1 -
谢谢@Knoop 在我的情况下工作正常,错误消失了
标签: c# linq where-clause tryparse