我有这个编:
1.3.10
File.ReadAllLines的类型是string [],如果我使用Array.zeroCreate,我必须确定一个初始数字,但是我没有使用File.ReadAllLines,所以我不知道数字。如果我使用ResizeArray,它的类型是ResizeArray,我无法将string []传递给它。
如何解决这个问题?谢谢!
答案 0 :(得分:4)
无需声明或初始化可变数组。只需使用let
将名称绑定到ReadAllLines
的结果
if File.Exists(maincfPath) then
let lines = File.ReadAllLines(maincfPath)
... // do something with lines
else
Environment.Exit(0)
在处理错误时,我更喜欢以这种方式使用if
then
else
,这样可以避免出现箭头图案:
if File.Exists(maincfPath) |> not then Environment.Exit(0) else
let lines = File.ReadAllLines(maincfPath)
... // do something with lines
答案 1 :(得分:2)
您可以只使用空数组[||]
,因为无论如何它将被File.ReadAllLines()
创建的数组替换。
答案 2 :(得分:0)
如果可能的话,请避免使用ReadAllLines
将所有行读入内存,这对您的内存不利,也是避免的好习惯。尝试改用File.ReadLines
,因为它会返回seq<string>
,并逐行读取到内存中,而不是一次全部读取。
for line in File.ReadLines(path) do
… // do something with line
如果您不想在此枚举行,它仍然只是seq<string>
(这是IEnumerable<string>
的别名),因此您可以将其传递给可以处理{ {1}},就像seq
模块一样,您将获得良好的负责任的内存管理,一次只消耗一行,而不是将整个文件加载到内存中,并且将一个巨大的字符串加载到LOH中。
回答您的问题,尽管您不应该这样做
Seq
就像给了reanyy一样,但是要再次避免尽可能将所有行都加载到内存中。