You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

F#中ToString、ToArray返回unit->函数类型而非值问题咨询

问题原因

F# 调用.NET 无参数实例方法时,若未添加空括号(),不会直接执行方法,而是会将方法本身转换为unit -> 返回值类型的函数值,这就是你得到(unit -> string)、(unit -> string[])类型的根本原因。
你代码中的两处问题均符合该场景:

  • (archive.GetEntry "mcmod.info").ToString 仅引用了ToString方法本身,未实际执行
  • mods.ToArray 仅引用了ToArray方法本身,未实际执行
解决方案

在无参数方法名后追加空括号()触发方法执行即可,修改后的正确代码如下:

let readZip filepath = ZipFile.OpenRead filepath
let replaceEnvs str = Environment.ExpandEnvironmentVariables str

let listFiles rawDir =
    replaceEnvs rawDir
    |> Directory.EnumerateFiles

let readModMetadata filepath =
    let archive = readZip filepath
    (archive.GetEntry "mcmod.info").ToString()    // 添加()执行方法,返回string类型

[<EntryPoint>]
let main args =
    let mods = listFiles modsFolder
    let modAsArray = mods.ToArray()   // 添加()执行方法,返回string[]类型
    0

补充说明:该规则同时适用于无参数静态方法、F#自定义无参数函数:不加括号获取的是函数本身的引用,加括号才会执行函数得到返回值。

内容的提问来源于stack exchange,提问作者Jamesthe1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:18:00