.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)
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)
但这没有任何意义.;)
归档时间: |
|
查看次数: |
721 次 |
最近记录: |