你可以用不同的方式写这个

Jas*_*orn 2 .net c#

.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);
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

Mar*_*ett 9

LAMBDA:

if (Directory.Exists(uploadDirectory)) 
  Directory.GetFiles(uploadDirectory)
    .Where(f => File.GetLastWriteTime(file) < DateTime.Now.AddHours(-12))
    .Each(f => File.Delete(f));
Run Code Online (Sandbox Code Playgroud)

编辑:第二个想法,您可以通过使用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());
}
Run Code Online (Sandbox Code Playgroud)

对于那些错过自己的每个方法:

void Each<T>(this IEnumerable e, Action<T> action) {
  foreach (T t in e) {
    action(t);
  }
}
Run Code Online (Sandbox Code Playgroud)

为了让它真的变得疯狂,并且适合C#3.0主题,让我们抛出一个匿名类型:

di.GetFiles().Select(f => new() {
   Delete = f.LastWriteTime < DateTime.Now.AddHours(-12) ? f.Delete : () => { }
}).Delete();
Run Code Online (Sandbox Code Playgroud)

但这没有任何意义.;)