Mark işaret ettiği gibi, sen (tıpkı diğer NET türüyle gibi) F # doğrudan Hashtable
türü ile çalışabilir. F # dizinleyiciler erişmek için sözdizimi olsa biraz farklıdır: Hashtable yana
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]
jenerik değil, muhtemelen dizeye geri nesne artığını isteyeyim. Bunu yapmak için, :?>
mahzun operatörünü kullanabilirsiniz veya takvimi unbox
anahtar kelimeyi kullanın ve sonuç olarak elde etmek istiyoruz ne tür belirtmek için bir tür ek açıklaması sağlayabilir:
let s = (sObj :?> string)
let (s:string) = unbox sObj
Eğer herhangi bir kontrole sahip olursa Hangi tür kullanıldığında, Hashtable
yerine Dictionary<int, string>
kullanmanızı öneririm. Bu C# ile tamamen uyumludur ve döküm yapmaktan kaçınmanız gerekir. F # bir sonucu olarak bu dönen ediyorsanız, ayrıca C# geçirmeden önce sadece upcast o IDictionary<_,_>
standart F # map
ve kullanabilirsiniz:
let map = Map.empty |> Map.add 1 "one"
let res = map :> IDictionary<_, _>
Bu şekilde, C#, kullanıcıların tanıdık bir türü görürler ancak kodu normal fonksiyonel tarzda yazabilirsiniz.
Yazarken-güvenlik Hashtable için veren bir jenerik Sözlük kullanmayı düşünün isteyebilirsiniz. Kullanım, mevcut cevaplarda açıklandığı gibidir. Ayrıca, dil içinde kalmak istiyorsanız F # içinde yerleşik bir harita türü vardır. –