代码之家  ›  专栏  ›  技术社区  ›  Jules

F#向上投射文本块到UIElement

  •  3
  • Jules  · 技术社区  · 14 年前

    let (x:UIElement) = upcast new TextBlock()
    

    错误是:类型'System.ComponentModel.ISupportInitialize'在此处是必需的,不可用。必须添加对程序集“System,Version=4.0.0….”的引用

    TextBlock 一种 UIElement

    注意,按照错误消息所说的做确实可以解决问题,但是为什么要做一些像向上投射这样基本的事情呢?

    2 回复  |  直到 11 年前
        1
  •  8
  •   Tomas Petricek    14 年前

    他提到的(现在删除了?)答:您的代码没有问题,您只需要添加对的引用 System.dll

    但是发生了什么? 您将在该特定行上获得错误消息,因为它是编译器遇到来自 库(接口) ISupportInitialize TextBlock

    获取相同错误消息的另一种方法是:

    let x = new TextBlock() 
    x.  // If you get IntelliSense here, you'll see just '<Note>' 
        // with the same error message as the one you're getting
    

    在这种情况下,IntelliSense需要查看类型(以便它可以填充成员完成)。

        2
  •  -3
  •   Ronald Wildenberg    14 年前

    documentation :

    Flexible Types (F#)。”

    let (x:#UIElement) = new TextBlock()
    

    您的代码将使用灵活的类型(由 #

    “此构造导致代码的泛型低于其类型注释所指示的泛型。在“c:\path”处或附近使用“#”、“#”或其他类型批注所隐含的类型变量\程序.fs'已被约束为类型'TextBlock'