我的第一个想法是:
type ManyNavigationPropertyInfo<'a,'b>(cfg:ManyNavigationPropertyConfiguration<'a, 'b>) =
Run Code Online (Sandbox Code Playgroud)
但是它解决了'a并且'bas obj,但它应该是类 - 因此我做了:
type ManyNavigationPropertyInfo<'a when 'a : not struct,'b when 'b : not struct>(cfg:ManyNavigationPropertyConfiguration<'a, 'b>) =
但这只是抛出一个错误说
类型名称中出现意外符号“,”。应为“>”或其他标记。
声明这种类型的正确方法是什么?
更新:
我的完整代码是:
type ManyNavigationPropertyInfo<'a,'b>(cfg:ManyNavigationPropertyConfiguration<'a, 'b>) =
member x.WithMany (expr: Expr<'a -> ICollection<'b>>) =
cfg.WithMany(ToLinq(expr))
Run Code Online (Sandbox Code Playgroud)
并与2个编译器错误说,出现'a和'b应not struct。
你的第一个想法是正确的。你应该可以只写:
type ManyNavigationPropertyInfo<'a,'b>
(cfg:ManyNavigationPropertyConfiguration<'a, 'b>) =
// ...
Run Code Online (Sandbox Code Playgroud)
问题可能出在类型主体的后面。根据您在正文中编写的内容,编译器认为'a并且'b必须是类型的obj(例如,您将这种类型的值传递到obj预期的某个地方,或者可能是更微妙的地方)。
您可以尝试在类的主体中添加类型注释 - 这通常有助于找到问题,因为当您对 F# 编译器解释与预期不同的位进行注释时,错误消息会发生变化。
要解决您的问题中的直接问题 - 指定约束的语法有点不同(首先编写所有类型变量,然后编写约束):
type ManyNavigationPropertyInfo<'a, 'b when 'a : not struct and 'b : not struct>( ... )
Run Code Online (Sandbox Code Playgroud)
(但如果你可以发布更多的代码,也许有人可以给出具体的建议。)
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |