Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq F#无法在注释后推断类型参数_Linq_F# - Fatal编程技术网

Linq F#无法在注释后推断类型参数

Linq F#无法在注释后推断类型参数,linq,f#,Linq,F#,所以我有一些json响应内容表示为字符串,我想得到它的属性名 我在做什么 let properties = Newtonsoft.Json.Linq.JObject.Parse(responseContent).Properties() let propertyNames, (jprop: JProperty) = properties.Select(jprop => jprop.Name); 根据答案,我需要注释对扩展方法的调用,但是,我仍然得到了错误 在此程序点之前,无法根据类型

所以我有一些json响应内容表示为字符串,我想得到它的属性名

我在做什么

 let properties = Newtonsoft.Json.Linq.JObject.Parse(responseContent).Properties()
 let propertyNames, (jprop: JProperty) = properties.Select(jprop => jprop.Name);
根据答案,我需要注释对扩展方法的调用,但是,我仍然得到了错误

在此程序点之前,无法根据类型信息确定方法“Select”的唯一重载。可能需要类型注释。候选:(扩展名)Collections.Generic.IEnumerable.Select(选择器:Func):Collections.Generic.IEnumerable


我做错了什么吗?

首先,您尝试使用的语法是lambda表达式的C#语法,而不是F#语法。在F#中,lambda表达式的正确语法是
funx->y

其次,语法
let a,b=c
的意思是“解构对”。例如:

let pair = (42, "foo")
let a, b = pair  // Here, a = 42 and b = "foo"
可以为一对元素提供类型注释:

let a, (b: string) = pair
但这对
pair
的工作方式没有任何影响

为了为lambda表达式的参数提供类型注释,只需对参数进行注释,还有什么更简单的方法

fun (x: string) -> y
综上所述,您的产品线应该是这样的:

let propertyNames = properties.Select(fun (jprop: JProperty) -> jprop.Name)
(另外,请注意结尾没有分号。F#不需要分号)



如果你在基本语法方面遇到这种困难,我建议你在尝试实现一些复杂的东西之前,先通读F#的内容,并仔细阅读一些示例。

首先,你尝试使用的语法是C#语法,而不是F#语法。在F#中,lambda表达式的正确语法是
funx->y

其次,语法
let a,b=c
的意思是“解构对”。例如:

let pair = (42, "foo")
let a, b = pair  // Here, a = 42 and b = "foo"
可以为一对元素提供类型注释:

let a, (b: string) = pair
但这对
pair
的工作方式没有任何影响

为了为lambda表达式的参数提供类型注释,只需对参数进行注释,还有什么更简单的方法

fun (x: string) -> y
综上所述,您的产品线应该是这样的:

let propertyNames = properties.Select(fun (jprop: JProperty) -> jprop.Name)
(另外,请注意结尾没有分号。F#不需要分号)



如果你在基本语法方面遇到了这样的困难,我建议你在尝试实现复杂的东西之前,先通读F#的内容,并仔细阅读几个例子。

是的,我刚刚意识到。谢谢你的解释我对F#world显然是新手是的,我刚刚意识到。谢谢你的解释,我对F#world显然是个新手