如何在具有 CLIEvent 属性的成员的 class 中禁用烦人的 Intellisense 注释?

How to disable the annoying Intellisense note in a class that has members with CLIEvent attributes?

与此类似post我有一个class,其中一些成员需要使用 CLIEvent 处理程序进行编译:

static let customEvent add remove =
  { new IDelegateEvent<_> with
        member this.AddHandler del = add del
        member this.RemoveHandler del = remove del }

let evKnock = customEvent (fun v -> t.AddHandler(knockEvent,v)) (fun v -> t.RemoveHandler(knockEvent,v))
let evPreviewKnock = customEvent (fun v -> t.AddHandler(previewKnockEvent,v)) (fun v -> t.RemoveHandler(previewKnockEvent,v))

[<CLIEvent>] member t.Knock = evKnock
[<CLIEvent>] member t.PreviewKnock = evPreviewKnock

现在在其他方法中,每当我键入 t. 时,我首先会在 Intellisense 中看到这种注释:

The event 'PreviewKnock' has a non-standard type. If this event is declared in another CLI language, you may need to access this method using explicit add_PreviewKnock and remove_PreviewKnock for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent< _ >' or 'IEvent< _ , _ >'

我能以某种方式关闭此警告吗?事件的类型为 IDelegateEvent。

我试图重现这个,但你的代码不完整,所以我不确定这是否与你得到的相同。但是,如果我稍微修改你的代码,我会得到和你一样的错误:

type A() = 
  let customEvent add remove =
    { new IDelegateEvent<_> with
          member this.AddHandler del = add del
          member this.RemoveHandler del = remove del }

  let evKnock = customEvent ignore ignore
  [<CLIEvent>] member t.Knock = evKnock

这似乎是因为 Knock 被推断为 IDelegateEvent<System.Delegate> 类型。

编译器希望您指定具体的委托类型 - 您可以定义自己的委托类型或使用 .NET 库中的标准委托类型。以下编译正常:

type A() = 
  let customEvent add remove =
    // Explicitly specify delegate type as System.EventHandler (for example)
    { new IDelegateEvent<System.EventHandler> with
          member this.AddHandler del = add del
          member this.RemoveHandler del = remove del }

  let evKnock = customEvent ignore ignore
  [<CLIEvent>] member t.Knock = evKnock