Generics 如何定义泛型函数及其返回参数

Generics 如何定义泛型函数及其返回参数,generics,f#,Generics,F#,我正在努力解决一个关于泛型的看似微不足道的问题 我有这些方法 let toTypedCollection r l = l |> List.iter (fun x -> r.Add(x) r let toRowDefinitions = toTypedCollection (new RowDefinitionCollection()) let toColsDefinitions = toTypedCollection (new ColumnDefinitio

我正在努力解决一个关于泛型的看似微不足道的问题

我有这些方法

 let toTypedCollection r l = 
     l |> List.iter (fun x -> r.Add(x)
     r
 let toRowDefinitions = toTypedCollection (new RowDefinitionCollection())
 let toColsDefinitions = toTypedCollection (new ColumnDefinitionCollection())
在哪里

但是现在的问题是,
toRowDefinitions
的结果签名如下

DefinitionCollection<RowDefiniton> -> list RowDefinition -> DefinitionCollection<RowDefinition>
DefinitionCollection->list RowDefinition->DefinitionCollection
除了返回类型之外,这一切都很好。我绝对需要一个
行定义集合
而不是
定义集合


有人知道如何做到这一点吗?

试试
让toTypedCollection)l=…


为我解决了一个简单示例中的问题,不过您可能需要对
toRowDefinitions
/
toColsDefinitions
进行注释,以确定确切的返回类型。

尝试
让toTypedCollection)l=…


为我解决了一个简单示例中的问题,不过您可能需要对
toRowDefinitions
/
toColsDefinitions
进行注释,以确定确切的返回类型。

尝试
让toTypedCollection)l=…


为我解决了一个简单示例中的问题,不过您可能需要对
toRowDefinitions
/
toColsDefinitions
进行注释,以确定确切的返回类型。

尝试
让toTypedCollection)l=…


#
在一个简单的示例中为我解决了这个问题,不过您可能需要对
toRowDefinitions
/
toColsDefinitions
进行注释,以确定确切的返回类型。

我想您正在寻找这样的东西:

let toTypedCollection (r : 'T when 'T :> ICollection<_>) l = 
    l |> List.iter (fun x -> r.Add(x))
    r
让toTypedCollection(r:'T when'T:>ICollection)l=
l |>List.iter(乐趣x->r.Add(x))
R
其中
ICollection
是来自
System.Collections.Generic
的集合,但是如果需要具体类型,当然可以使用
DefinitionCollection

显示一个较短的符号,以实现类似类型的注释,而不命名
'T
:当'T:>ICollection时,您可以编写
#ICollection
。在本例中,
'T
不在其他地方使用,因此此符号较短


还有一种类型安全性较低的方法,可以使
toTypedCollection
内联,并添加一个静态成员约束,
r
需要一个
Add
方法;但是有了它,它就可以在任何类型上使用
Add
方法,这通常不是一个好主意。

我想您正在寻找这样的方法:

let toTypedCollection (r : 'T when 'T :> ICollection<_>) l = 
    l |> List.iter (fun x -> r.Add(x))
    r
让toTypedCollection(r:'T when'T:>ICollection)l=
l |>List.iter(乐趣x->r.Add(x))
R
其中
ICollection
是来自
System.Collections.Generic
的集合,但是如果需要具体类型,当然可以使用
DefinitionCollection

显示一个较短的符号,以实现类似类型的注释,而不命名
'T
:当'T:>ICollection时,您可以编写
#ICollection
。在本例中,
'T
不在其他地方使用,因此此符号较短


还有一种类型安全性较低的方法,可以使
toTypedCollection
内联,并添加一个静态成员约束,
r
需要一个
Add
方法;但是有了它,它就可以在任何类型上使用
Add
方法,这通常不是一个好主意。

我想您正在寻找这样的方法:

let toTypedCollection (r : 'T when 'T :> ICollection<_>) l = 
    l |> List.iter (fun x -> r.Add(x))
    r
让toTypedCollection(r:'T when'T:>ICollection)l=
l |>List.iter(乐趣x->r.Add(x))
R
其中
ICollection
是来自
System.Collections.Generic
的集合,但是如果需要具体类型,当然可以使用
DefinitionCollection

显示一个较短的符号,以实现类似类型的注释,而不命名
'T
:当'T:>ICollection时,您可以编写
#ICollection
。在本例中,
'T
不在其他地方使用,因此此符号较短


还有一种类型安全性较低的方法,可以使
toTypedCollection
内联,并添加一个静态成员约束,
r
需要一个
Add
方法;但是有了它,它就可以在任何类型上使用
Add
方法,这通常不是一个好主意。

我想您正在寻找这样的方法:

let toTypedCollection (r : 'T when 'T :> ICollection<_>) l = 
    l |> List.iter (fun x -> r.Add(x))
    r
让toTypedCollection(r:'T when'T:>ICollection)l=
l |>List.iter(乐趣x->r.Add(x))
R
其中
ICollection
是来自
System.Collections.Generic
的集合,但是如果需要具体类型,当然可以使用
DefinitionCollection

显示一个较短的符号,以实现类似类型的注释,而不命名
'T
:当'T:>ICollection时,您可以编写
#ICollection
。在本例中,
'T
不在其他地方使用,因此此符号较短


还有一种类型安全性较低的方法,可以使
toTypedCollection
内联,并添加一个静态成员约束,
r
需要一个
Add
方法;但是有了它,它就可以用
Add
方法处理任何类型,这通常不是一个好主意。

添加返回类型注释(
toTypedCollection(r:…)l:DefinitionCollection
)不起作用吗?@john:这是我已经得到的。但是我需要一个RowDefinitionCollection试用
让toTypedCollection)l
或其他什么。。。甚至在返回任何内容之前强制输入(to'T)。可以尝试发布一些包含所有所需代码的完全“运行”的代码示例……添加返回类型注释(
toTypedCollection(r:…)l:DefinitionCollection
)不起作用吗?@john:这就是我已经得到的。但是我需要一个rowDefinitionCollection试用
让toTypedCollection)l
或s