直接贴代码:
static void Main(string[] args) { IEnumerablequery = "How are you, friend."; //我们的目的是去除元音字母 foreach (char vowel in "aeiou") { query = query.Where(c => c != vowel); } foreach (char c in query) { Console.Write(c); //结果:How are yo, friend. } Console.WriteLine(); //结果中只有字母u被过滤了,咋一看,有没有吃一惊呢! //但只要仔细一想就能知道原因:因为vowel定义在循环之外,所以每个lambda表达式都捕获了同一变量。 //当我们的query执行时,vowel的值是什么呢?不正是被过滤的字母u嘛。 //要解决这个问题,我们只需把循环变量赋值给一个内部变量即可, //如下面的temp变量作用域只是当前的lambda表达式。 foreach (char vowel in "aeiou") { char temp = vowel; query = query.Where(c => c != temp); } foreach (char c in query) { Console.Write(c); //结果:Hw r y, frnd. } Console.WriteLine(); }
谢谢浏览!