C#三元运算符列表运算符

时间:2015-03-06 17:41:38

标签: c# list operator-keyword ternary-operator

任何人都知道最快的三元手术。

label1.Text = Cclass.TestMe()
                    .Where(t => t.GFName == (textBox1.Text == "" 
                                              ? "GName" 
                                              : textBox1.Text))
                    .First()
                    .GFName == null ? 
              "Nothing" : 
              "Super";

我试图检查List是否为空返回一些东西。因此编译器不会抛出异常或无错误。

2 个答案:

答案 0 :(得分:1)

例外 原因 First()。如果没有要返回的行,它将抛出异常。而不是你可以使用FirstOrDefault()来返回默认值(所有引用类型为NULL)。但是如果你想检查列表中是否有任何元素来计算条件,那么你必须使用Any()扩展方法:

 return Cclass.TestMe()
                .Any(t => t.GFName == (textBox1.Text == "" ? "GName" : textBox1.Text)) ? 
        "Super" : 
        "Nothing";

顺便说一下,最好在查询之外设置文字:

var filteredText = textBox1.Text == "" ? "GName" : textBox1.Text;
return Cclass.TestMe().Any(t => t.GFName == filteredText) ? 
            "Super" : 
            "Nothing";

答案 1 :(得分:0)

如果我理解正确,如果where子句返回某个值,则返回一个值,否则返回另一个值。那将是:

label1.Text = Cclass.TestMe()
                    .Any(t => t.GFName == (textBox1.Text == "" 
                                              ? "GName" 
                                              : textBox1.Text)) ? 
              "Super" : 
              "Nothing";

如果这不是你想要的,那么重新安排你的代码以使用if语句使其工作,然后使其更好。丑陋的工作代码总是比优雅的破解代码更好。