foreach ラムダ式

以下の2つは等価

Array.ForEach( Path.GetInvalidFileNameChars(), c => fileName = fileName.Replace( c.ToString(), "" ) );
foreach ( var c in Path.GetInvalidFileNameChars() ) {
	fileName = fileName.Replace( c.ToString(), "" );
}

後者のほうがわかりやすいとは思うんだけど。

でも本当は

Path.GetInvalidFileNameChars().ForEach( c => fileName = fileName.Replace( c.ToString(), "" ) );

class static Extentions {
	static public void ForEach<T>( this T[] array, Action<T> action ) {
		Array.ForEach( array, action );
	}
}

こうじゃね?