.NET 3.5/C#3.0中有一些很酷且令人兴奋的功能,这些功能带来了一些非常有趣的方法来编写完全相同的代码行.
使用上面提到的工具集(以及扩展的.NET 2.0东西),下面的代码片段可以合理地重写的不同方式有哪些?
string uploadDirectory = "c:\\some\\path\\"; if (Directory.Exists(uploadDirectory)) { string[] files = Directory.GetFiles(uploadDirectory); foreach (string filename in files) { if (File.GetLastWriteTime(filename).AddHours(12) < DateTime.Now) { File.Delete(filename); } } }
Mark Bracket.. 9
LAMBDA:
if (Directory.Exists(uploadDirectory)) Directory.GetFiles(uploadDirectory) .Where(f => File.GetLastWriteTime(file) < DateTime.Now.AddHours(-12)) .Each(f => File.Delete(f));
编辑:第二个想法,您可以通过使用DirectoryInfo和FileInfo而不是静态File方法来避免每个文件访问的安全性查找:
var di = new DirectoryInfo(uploadDirectory); if (di.Exists()) { di.GetFiles() .Where(f => f.LastWriteTime < DateTime.Now.AddHours(-12)) .Each(f=> f.Delete()); }
对于那些错过自己的每个方法:
void Each(this IEnumerable e, Action action) { foreach (T t in e) { action(t); } }
为了让它真的变得疯狂,并且适合C#3.0主题,让我们抛出一个匿名类型:
di.GetFiles().Select(f => new() { Delete = f.LastWriteTime < DateTime.Now.AddHours(-12) ? f.Delete : () => { } }).Delete();
但这没有任何意义.;)
LAMBDA:
if (Directory.Exists(uploadDirectory)) Directory.GetFiles(uploadDirectory) .Where(f => File.GetLastWriteTime(file) < DateTime.Now.AddHours(-12)) .Each(f => File.Delete(f));
编辑:第二个想法,您可以通过使用DirectoryInfo和FileInfo而不是静态File方法来避免每个文件访问的安全性查找:
var di = new DirectoryInfo(uploadDirectory); if (di.Exists()) { di.GetFiles() .Where(f => f.LastWriteTime < DateTime.Now.AddHours(-12)) .Each(f=> f.Delete()); }
对于那些错过自己的每个方法:
void Each(this IEnumerable e, Action action) { foreach (T t in e) { action(t); } }
为了让它真的变得疯狂,并且适合C#3.0主题,让我们抛出一个匿名类型:
di.GetFiles().Select(f => new() { Delete = f.LastWriteTime < DateTime.Now.AddHours(-12) ? f.Delete : () => { } }).Delete();
但这没有任何意义.;)