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

为什么匿名类型不能传递给方法?

c#
  •  2
  • asyncwait  · 技术社区  · 16 年前

    倾向于不从方法返回匿名类型的设计决策是什么?

    6 回复  |  直到 16 年前
        1
  •  6
  •   Jon Skeet    16 年前

    你呢 可以 从一个方法返回一个匿名类型的实例-但是因为你不能命名它,你不能准确地声明这个方法将返回什么,所以你必须声明它只返回 object . 这意味着调用者将不具有对属性等的静态类型化访问——尽管他们仍然可以传递实例,通过反射(或者在C#4中动态类型化)来访问它。

    有 一个粗野的黑客围着它转,叫着 casting by example . 不过我不推荐。

        2
  •  1
  •   user151323 user151323    16 年前

    因为匿名类型没有名称。因此,不能为方法声明返回类型。

        3
  •  1
  •   Darin Dimitrov    16 年前

        4
  •  1
  •   remi bourgarel    16 年前

    如果定义仅在方法的调用中,如何在方法中使用类型?

        5
  •  1
  •   Henk Holterman    16 年前

    许多答案似乎表明,这是不可能的,因为目前的语法和规则。但问题是如何改变它们。我认为这是可能的,但是有点复杂,导致语法很难理解(容易出错)。就像

    var f() { return new { A = "*", B = 1 }; }
    
    var x = f();
    

        6
  •  0
  •   giorgian    16 年前

    至少在3.5版本之前,匿名类型实际上是在编译时解析的,这对于匿名方法签名来说是不可能的(或者很难做到)。