如何在linq中使用TryParse

问题描述

        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,因为我不知道如何使用out值进行比较。我要使用TryParse,因为出现以下错误消息:

输入字符串的格式不正确

如何在当前的Senario中实现这一目标?

解决方法

这有点冗长,但是假设您只想返回可以将值解析为double的行:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...