2011-06-04 2 views
2

Я использую используя Microsoft.FSharp.Core.Collections.FSharpMap и очень часто приходится писать:Есть ли более компактный синтаксис для TryFind?

var oo = world.Entity.TryFind(t); 
var entity = oo == null ? null : oo.Value; 

И похоже. Любые предложения для лучшего стиля?

+5

Просто любопытно: почему бы вам не использовать 'Dictionary', или даже лучше, F #? – Daniel

+0

В моем конкретном случае мне нужна постоянная реализация карты, чтобы эффективно записывать моментальные снимки исторических изменений, и проект в основном является C#. –

ответ

6

Вы могли бы написать Extension Method:

public static T ValueOrDefault<T>(this FSharpOption<T> option) 
{ 
    return option == null ? default(T) : option.Value; 
} 

Использование:

var entity = world.Entity.TryFind(t).ValueOrDefault(); 
+0

это хорошо, я обычно делаю это с помощью .net-типов, которые могут возвращать null для обертывания в опции., В основном, если null, то никто другой ... – Alex

Смежные вопросы