2011-06-04 54 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 2011-06-04 03:20:08

+0

在我的特殊情况下,我需要一个持久的地图实现来有效地记录历史变化的快照,并且该项目已经基本上是C#了。 – 2011-06-07 00:04:08

回答

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 2011-06-06 14:56:32