我有一个扩展方法
type System.Int32 with
member this.Thousand() = this * 1000
但它需要我这样写
(5).Thousand()
我很想摆脱这两个括号,首先将其设为属性而不是方法(为了学习)我如何将其设为属性?
我有一个扩展方法
type System.Int32 with
member this.Thousand() = this * 1000
但它需要我这样写
(5).Thousand()
我很想摆脱这两个括号,首先将其设为属性而不是方法(为了学习)我如何将其设为属性?
Jon 的回答是这样做的一种方法,但对于只读属性,还有一种更简洁的方法来编写它:
type System.Int32 with
member this.Thousand = this * 1000
此外,根据您的喜好,您可能会发现写起来5 .Thousand
(注意多余的空间)比(5).Thousand
(但您不能只写5.Thousand
,甚至写)更令人愉悦5.ToString()
。
我真的不知道 F#(可耻!),但根据这篇博文,我希望:
type System.Int32 with
member this.Thousand
with get() = this * 1000
我怀疑这不会让你从第一组括号中解脱出来(否则 F#可能会尝试将整个内容解析为文字),但它应该可以帮助你处理第二组括号。
就个人而言,我不会将这种东西用于“生产”扩展,但它对于您使用大量值的测试代码很有用。
特别是,我发现在日期周围有扩展方法很不错,例如19.June(1976)
,作为一种非常简单、易于阅读的构建测试数据的方法。但不适用于生产代码:)
它并不漂亮,但如果你真的想要一个适用于任何数字类型的函数,你可以这样做:
let inline thousand n =
let one = LanguagePrimitives.GenericOne
let thousand =
let rec loop n i =
if i < 1000 then loop (n + one) (i + 1)
else n
loop one 1
n * thousand
5.0 |> thousand
5 |> thousand
5I |> thousand