First look at the program:
Code
Using System;
Using System. Collections. Generic;
Using System. Linq;
Using System. Text;
Namespace shortletets
{
Class Program
{
Static void Main (string [] args)
{
String srcStr = "Xinzhou district _ Wuhan, Huangpu District _ Shanghai, Hongshan district _ Wuhan, chong'an district _ Wuxi, Huangpi District _ Wuhan, binhu district _ Wuxi ";
String cityName = "Wuhan, Wuxi, Shanghai ";
String [] citysArr = cityName. Split (',');
IEnumerable <string> [] areaName = new IEnumerable <string> [citysArr. Length];
Int count = 0;
For (; count <citysArr. Length; count ++)
{
AreaName [count] = srcStr. Split (','). Where (a => a. Contains (citysArr [count]). Distinct ();
}
// Console. WriteLine (count );
Console. Read ();
}
}
}
At last, the value of areaname [0], areaname [1], and areaname [2] is "Huangpu District _ Shanghai ".
Code
Using system;
Using system. Collections. Generic;
Using system. LINQ;
Using system. text;
Namespace shortletets
{
Class Program
{
Static void main (string [] ARGs)
{
String srcstr = "Xinzhou district _ Wuhan, Huangpu District _ Shanghai, Hongshan district _ Wuhan, chong'an district _ Wuxi, Huangpi District _ Wuhan, binhu district _ Wuxi ";
String cityname = "Wuhan, Wuxi, Shanghai ";
String [] citysarr = cityname. Split (',');
Ienumerable <string> [] areaname = new ienumerable <string> [citysarr. Length];
Int COUNT = 0;
For (; count <citysarr. length; count ++)
{
Int temp = count;
AreaName [count] = srcStr. Split (','). Where (a => a. stinins (citysArr [temp]). Distinct ();
}
// Console. WriteLine (count );
Console. Read ();
}
}
}
You can get the desired result.
My post:
Http://topic.csdn.net/u/20091214/23/dddde3da-a064-436a-bf47-830dc80b7690.html
I haven't fully figured it out yet. I dare not make a final conclusion. Leave a space first.
Articles and discussions on similar issues:
Http://topic.csdn.net/u/20090821/13/7c30e8cb-3d37-4d4f-9c11-0df1dd7be8f4.html
Http://www.cnblogs.com/foundation/archive/2008/12/11/1352797.html
Http://www.cnblogs.com/qishichang/archive/2009/06/20/1507540.html
Http://www.cnblogs.com/Klesh/archive/2008/05/15/The-Beauty-of-Closures.html
Http://www.kuqin.com/dotnet/20080421/7169.html
I agree with the opinion in the second link:
"If a variable is referenced in an anonymous method, the local variable is promoted to an instance variable and stored in a closure object. After the upgrade, the variable will not die even if the method for creating the variable is executed. When all references to the anonymous function disappear, the closure variable can be Normally recycled by the garbage collector. Parameters or internal variables in the closure are not placed in the stack, but in a global table during program execution.
Local variables extend the life cycle by changing to the instance field of the object. The compiler automatically generates Nested classes and gives the value of local variables to the objects of the nested classes. When the methods are called, the values are extracted from the objects ."
Supplement:
SrcStr. split (','). where (a =>. contains (citysArr [temp]). distinct (); is an anonymous method. The correct result can be obtained by using temp because temp reopens up space every time.
What is a closure?
To put it simply, the closure allows you to encapsulate some behaviors and deliver them like an object, and it can still access the context of the first declaration. In this way, the control structure and logical operations can be separated from the call details. The ability to access the original context is an important feature of the difference between closures and general objects, although there are only some compiler skills in implementation.