我想知道如何在F#中使用System.Collections.Hashtable
。它是Hashtable的原因是因为我引用了C#程序集。
我如何调用以下方法? - 添加 - 从密钥中获取价值
我无法在Google中找到任何有用的内容。
答案 0 :(得分:11)
正如Mark指出的那样,您可以直接使用F#中的Hashtable
类型(就像使用任何其他.NET类型一样)。在F#中访问索引器的语法虽然略有不同:
open System.Collections
// 'new' is optional, but I would use it here
let ht = new Hashtable()
// Adding element can be done using the C#-like syntax
ht.Add(1, "One")
// To call the indexer, you would use similar syntax as in C#
// with the exception that there needst to be a '.' (dot)
let sObj = ht.[1]
由于Hashtable不是通用的,您可能希望将对象强制转换为字符串。为此,您可以使用:?>
向下转换运算符,也可以使用unbox
关键字并提供类型注释以指定您希望获得的类型:
let s = (sObj :?> string)
let (s:string) = unbox sObj
如果您对使用的类型有任何控制权,那么我建议您使用Dictionary<int, string>
代替Hashtable
。这与C#完全兼容,您可以避免进行强制转换。如果您从F#返回此结果,您还可以使用标准F#map
并将其转发到IDictionary<_,_>
,然后再将其传递给C#:
let map = Map.empty |> Map.add 1 "one"
let res = map :> IDictionary<_, _>
这样,C#用户会看到一个熟悉的类型,但你可以用通常的功能样式编写代码。
答案 1 :(得分:2)
这很简单。
open System.Collections //using System.Collections
let ht = Hashtable() // var ht = new Hashtable()
ht.Add(1, "One")
let getValue = ht.Item[1] // var getValue = ht[1];
//NB: All indexer properties are named "Item" in F#.