C# C在何处选择

C# C在何处选择,c#,linq,select,where,func,C#,Linq,Select,Where,Func,有人能帮我解释一下下面的代码中发生了什么吗?非常感谢!结果是meo,但我不明白这两个“where”在这种情况下是如何工作的 public class Cat { public string Text { get; set; } public Cat Where(Func<Cat,bool> cond) { return new Cat { Text = cond(this)? this.Text.ToUpper(): this.Text.ToLower()

有人能帮我解释一下下面的代码中发生了什么吗?非常感谢!结果是meo,但我不明白这两个“where”在这种情况下是如何工作的

public class Cat {
  public string Text { get; set; }
  public Cat Where(Func<Cat,bool> cond) {
    return new Cat {
      Text = cond(this)? this.Text.ToUpper(): this.Text.ToLower()
    }; }
  }
public static class CatExtensions {
    public static T Select<T>(this Cat cat, Func<Cat,T> proj) 
      { 
         return proj(cat);
      } 
 }


var moggy = new Cat { Text = "Meo" }; 
var result = from m in moggy
   where true 
   where false 
   select m.Text;

这些是LINQ中的多Where子句

通常这就像一个简单的条件

例如,假设我们有一个客户实体,所有客户都存储在一个变量results中,我们希望得到名为John、姓为Doe的客户,那么我们就可以这样做

results.Where(x => (x.FirstName == "John") && (x.LasttName == "Doe"));
现在,这段代码可以用两个Where子句编写,如

results.Where(x => (x.FirstName == "John"))
       .Where(x => (x.LasttName == "Doe"));

如果查看该表达式的方法链接语法版本,则更容易理解:

moggy
  .Where(m => true)     // returns new Cat { Text = "MEO" }
  .Where(m => false)    // returns new Cat { Text = "meo" }
  .Select(m => m.Text); // returns "meo"
从B中的a开始,其中E被认为与B相同。其中E=>E

由于类定义了自己的Where方法,因此使用这些方法而不是Linq定义的方法,因为实例方法总是比扩展方法(如果可用)更容易选择。而且这些方法无论如何都不适用

第一个返回全大写MEO cat,然后第二个执行该操作并返回全小写MEO cat


select是一种扩展方法,它将委托应用于最后一个对象

第二个where子句不会让当前的猫通过,是吗?谢谢!我有点困惑。Where是Where的扩展方法吗?为什么在使用小写字母的表达式中使用Where查看表达式?Where是在Cat类中定义的自定义方法。它不是.NET framework中的Where方法。@user3735871如果在LINQ表达式中使用Where,它将在接受Func类型参数的对象上查找名为Where的方法,如果存在该方法,则使用该方法。这就是这里发生的事情。@displayName where子句都没有经过原始Cat。每个人都返回一只新的猫。这在这里不相关也不适用。