在F#mantra中,似乎有一种内心的避免null,Nullable<T>以及它的同类.作为交换,我们应该使用选项类型.说实话,我并没有真正看到差异.
我对F#选项类型的理解是它允许您指定一个可以包含其任何正常值的类型,或者None.例如,除了之外,还Option<int>允许所有int可以拥有的值None.
我对C#可空类型的理解是它允许你指定一个可以包含任何正常值的类型,或者null.例如,Nullable<int>又名int?允许所有的值的int可具有,除了null.
有什么不同?用Nullable和Option,做一些词汇替换,null并且None,你基本上有相同的东西.有什么大惊小怪的null?
所以我一直在阅读Apress的Expert F#书,主要是在构建一个玩具式的F#库时使用它作为参考,但有一件事我没有掌握,那就是"选项"类型.
它是如何工作的以及它的真实用途是什么?
具有可以为空的字段的记录是合法的,例如:
type MyRec = { startDate : System.Nullable<DateTime>; }
Run Code Online (Sandbox Code Playgroud)
这个例子确实构建在我的项目中,但如果它是合法的,这是一个好的做法,如果有什么问题,这会引入什么?
显然你不能在Silverlight中拥有Nullable <Rectangle>.我想知道为什么没有技术原因以及可能适用的对象数量?
今天我在说明"矩形"类型不是Nullable类型之后偶然发起了一个小小的评论.那就是你不能有" Nullable <Rectangle> "或" Rectangle? "
我的错误是仅在Silverlight中测试它并假设Silverlight System.Windows.Shapes.Rectangle的行为转移到.Net中的System.Drawing.Rectangle类型.对我感到羞耻.我已经删除了我的评论,因为他们没有为Stack Overflow添加任何值.
如果有人能够完全回答这个问题,我将不胜感激.