Types 向列表中添加属性扩展名,在F中#

Types 向列表中添加属性扩展名,在F中#,types,f#,extension-methods,Types,F#,Extension Methods,作为问题的后续行动: 我试图弄清楚是否可以使用属性扩展列表 以代码为例: let a = [] if a.IsEmpty then ... 但我通常也有: if not a.IsEmpty then 这不是超级可读的,所以我想我应该做一个扩展(基于Tomas在上面问题中的回答): 但我有: if a.IsEmpty then // property if a.IsNotEmpty() then // member 有没有一种方法可以使IsNotEmpty也成为属性的扩展名?这不是很有用吗

作为问题的后续行动:

我试图弄清楚是否可以使用属性扩展列表

以代码为例:

let a = []
if a.IsEmpty then ...
但我通常也有:

if not a.IsEmpty then
这不是超级可读的,所以我想我应该做一个扩展(基于Tomas在上面问题中的回答):

但我有:

if a.IsEmpty then // property
if a.IsNotEmpty() then // member

有没有一种方法可以使IsNotEmpty也成为属性的扩展名?

这不是很有用吗

type List<'T> with
    member this.IsNotEmpty with get() = not this.IsEmpty

类型列表这是否有用

type List<'T> with
    member this.IsNotEmpty with get() = not this.IsEmpty

类型列表我认为我们应该使用类型扩充:

type List<'A> with
    member this.IsNotEmpty = this.IsEmpty |> not
let a = []
a.IsNotEmpty |> printfn "%b"

类型列表我认为我们应该使用类型扩充:

type List<'A> with
    member this.IsNotEmpty = this.IsEmpty |> not
let a = []
a.IsNotEmpty |> printfn "%b"

类型列表我想没有!我也不认为有办法做到这一点。但是
not a.IsEmpty
只比
a.IsNotEmpty
长一个字符,而且它以
not
开头的事实非常明显,它是否定的(在阅读使用
a.IsNotEmpty
的代码时,这可能很容易被忽略)。我认为它有助于可读性,但同时,这主要是出于好奇:)我发现总是以肯定的方式命名布尔和布尔返回的东西,然后在需要时用
not
否定是不那么令人困惑的。我知道这并不能回答你的问题,但对于这个特定的例子来说,用|[]->…| |->匹配列表是惯用的方法我认为没有!我也不认为有办法做到这一点。但是
not a.IsEmpty
只比
a.IsNotEmpty
长一个字符,而且它以
not
开头的事实非常明显,它是否定的(在阅读使用
a.IsNotEmpty
的代码时,这可能很容易被忽略)。我认为它有助于可读性,但同时,这主要是出于好奇:)我发现总是以肯定的方式命名布尔和布尔返回的东西,然后在需要时用
not
否定是不那么令人困惑的。我知道这并不能回答你的问题,但对于这个特定的例子来说,用|[]->…| |->匹配列表是惯用的方法