我正在学习F#,所以我提出了一小段代码来帮助我掌握语言。我创建了下面的代码,从C#调用,然后保存上传的文件。我该如何改进这段代码?欢迎所有观点。
open System.Web
open System.IO
type SaveUpload(file: HttpPostedFileBase, path : string) =
// get the file name
let origFileName = file.FileName
// create the path including filename
let filePath = Path.Combine(path, origFileName)
// directory check
let directory = Directory.Exists(path)
// create directory
let createDir x =
match x with
|false -> Directory.CreateDirectory(path) |> ignore
|true -> ()
// save file
let saveFile =
createDir directory
if directory
then file.SaveAs(filePath)
答案 0 :(得分:6)
以下是一些简单的想法:
正如您所写,代码定义了一个类型SaveUpload
,但您实际上是在实现一些有用的代码 - 所以我不明白为什么这会是一个类型。您可以将其编写为静态成员或函数(两者都将作为C#的静态方法)
我不确定使用match
的布尔模式匹配是否真的有用。使用if
可能会更短(但在更高级的情况下,模式匹配很棒)
最后,您正在定义变量saveFile
,但这只是unit
类型的值 - 所有代码都已执行,当有人调用时保存文件构造函数。如果您打算将此方法作为方法,则需要将单位值()
作为参数。
同样,directory
是一个只计算一次的值 - 因此,如果目录不存在,您的代码会创建它,但不会保存文件,因为{{1} }值仍为directory
。
所以,如果我想把它写成一个模块中的函数,我会选择这样的东西:
false