如何定义F#lambda函数来返回特定的数据类型?

如何定义F#lambda函数来返回特定的数据类型?,f#,moq,F#,Moq,我试图使用Moq分配回调,但无法确定如何定义返回布尔值的lambda函数。在C语言中,这对我来说非常简单,但我在尝试将其转换为F等价物时遇到了问题 let mockHttpMessageHandler = Mock<HttpMessageHandler>(MockBehavior.Strict) mockHttpMessageHandler .Protected() .Setup<Task<HttpResponseMessage>>(

我试图使用Moq分配回调,但无法确定如何定义返回布尔值的lambda函数。在C语言中,这对我来说非常简单,但我在尝试将其转换为F等价物时遇到了问题

let mockHttpMessageHandler = Mock<HttpMessageHandler>(MockBehavior.Strict)
mockHttpMessageHandler
    .Protected()
    .Setup<Task<HttpResponseMessage>>(
        "SendAsync",
        It.IsAny<HttpRequestMessage>()
    )
    .ReturnsAsync(
        dummyHttpResponseMessage
    )
    .Callback<HttpClient>(fun r -> r.DefaultRequestHeaders.Contains("SomeHeaderHere"))
    .Verifiable()
让mockHttpMessageHandler=Mock(MockBehavior.Strict)
mockHttpMessageHandler
.Protected()
.设置(
“SendAsync”,
It.IsAny()
)
.ReturnsAsync(
dummyHttpResponseMessage
)
.Callback(fun r->r.DefaultRequestHeaders.Contains(“SomeHeaderHere”))
.可核实的

正如您从屏幕截图中看到的,我收到一个FS0001错误,说明表达式应具有单位(void)类型,但它返回bool(实际上是我想要返回的类型)

屏幕截图显示我正在寻找一个空字符串,它不是最终代码所反映的内容,而是作为一个示例,非空字符串仍然会产生相同的错误,因此与问题无关


我如何修改这个lambda表达式来表示函数期望的结果是boolean而不是void?

正如brianberns在评论中所说,
回调函数期望的是返回单位的函数

您可以通过这样的方式实现我认为您想要的(在这里使用来自XUnit的断言):

.Callback(fun r->r.DefaultRequestHeaders.Contains(“)|>Assert.True())

错误消息是正确的。Moq的
回调
函数需要返回
单位
,而不是
bool
。我想这是常用的。也许你可以发布你试图翻译的C代码,这样我们就可以理解你试图做什么了?我本来打算发布C代码,直到检查完我的代码再次,观察你的评论,这似乎是我在翻译中的错误。甚至我引用的C#代码也说明了数据的操作,因此它也没有返回任何内容。这实际上是我试图在代码中实现的,它现在可以在没有错误的情况下工作。我只需要解决另一个与res无关的问题正在解决方法和回调的不匹配签名。可能需要创建/派生MessageHandler对象的某种类型的扩展。但是您的代码建议解决了最初的问题。谢谢
.Callback<HttpClient>(fun r -> r.DefaultRequestHeaders.Contains(") |> Assert.True ())