Khi đánh dấu chỉ ra, bạn có thể làm việc với loại Hashtable
trực tiếp từ F # (giống như với bất kỳ loại .NET nào khác). Cú pháp để truy cập các chỉ mục trong F # hơi khác một chút mặc dù:
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]
Vì Hashtable không phải là chung chung, bạn có thể muốn đưa đối tượng trở lại chuỗi. Để làm điều đó, bạn có thể sử dụng toán tử nhìn xuống :?>
, hoặc bạn có thể sử dụng từ khóa unbox
và cung cấp một loại chú thích để xác định những loại nào bạn muốn để có được như là kết quả:
let s = (sObj :?> string)
let (s:string) = unbox sObj
Nếu bạn có bất kỳ kiểm soát trên loại được sử dụng, sau đó tôi khuyên bạn nên sử dụng Dictionary<int, string>
thay vì Hashtable
. Điều này là hoàn toàn tương thích với C# và bạn sẽ tránh được sự cần thiết phải làm đúc. Nếu bạn đang trở về này kết quả là từ F #, bạn cũng có thể sử dụng tiêu chuẩn F # map
và chỉ bị ném lên trời nó để IDictionary<_,_>
trước khi đi qua nó để C#:
let map = Map.empty |> Map.add 1 "one"
let res = map :> IDictionary<_, _>
Bằng cách này, C# người dùng sẽ thấy một loại quen thuộc, nhưng bạn có thể viết mã theo kiểu chức năng thông thường.
Nguồn
2010-06-13 13:18:43
Bạn có thể muốn xem xét sử dụng một từ điển chung, mang lại cho bạn loại an toàn cho các hashtable. Cách sử dụng cũng giống như được mô tả trong các câu trả lời hiện tại. Ngoài ra, có một loại bản đồ tích hợp trong F #, nếu bạn muốn ở trong ngôn ngữ đó. –