【问题标题】:How to use TryParse in linq where如何在 linq where 中使用 TryParse
【发布时间】: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 变量在调用相应方法后即可使用。所以只需在末尾添加一个&amp;&amp; res == res1(请记住,尽管您必须在查询中修复更多内容,例如您使用 assingment 运算符 = 而不是相等比较 ==。虽然您可能想要使用&amp;&amp; 运算符来验证两个解析是否成功)。此外,TryParse 不会修复不正确的输入字符串,但不会抛出异常,而是会返回 false 并将 out 参数设置为默认值。
  • 所以它可能看起来像这样(实际的实现可能会有所不同,因为它并不完全清楚你在寻找什么功能):y =&gt; y.Key == a.Item1 &amp;&amp; double.TryParse(y.Value, out double res) &amp;&amp; double.TryParse(a.Item3, out double res1) &amp;&amp; res == res1
  • 谢谢@Knoop 在我的情况下工作正常,错误消失了

标签: c# linq where-clause tryparse


【解决方案1】:

它有点冗长,但假设您只想返回可以将值解析为双精度的行:

result = dict.Where(x => x.Value.Any(y => y.Key == a.Item1 
     && double.TryParse(y.Value,out double res)  // Value can be parsed
     && double.TryParse(a.Item3,out double res1) // Item3 can be parsed
     && res == res1)); // the 2 parsed results match

【讨论】:

    猜你喜欢
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2012-03-28
    相关资源
    最近更新 更多