代码之家  ›  专栏  ›  技术社区  ›  Abe Miessler

为什么不能将匿名类型作为参数传递给函数?

  •  4
  • Abe Miessler  · 技术社区  · 14 年前

    我本来想做下面这样的事,但没用。为什么.NET不让我这么做?

    private void MyFunction(var items)
    {
     //whatever
    }
    
    3 回复  |  直到 14 年前
        1
  •  7
  •   Nate CSS Guy    14 年前

    从Visual C_3.0开始,在方法范围内声明的变量可以具有隐式类型变量。隐式类型的局部变量是强类型的,就像您自己声明了类型一样,但编译器确定了类型。以下两个i声明在功能上是等效的:

    var i = 10; // implicitly typed
    int i = 10; //explicitly typed
    

    换句话说, var 关键字只允许用于本地范围的变量。

    Source .

    更多信息 here . 基本上,使用时 var 还必须将变量初始化为同一行上的值,以便编译器知道它是什么类型。

        2
  •  2
  •   STO    14 年前

    严格来说,可以将匿名类型作为参数传递,但不能以强类型方式访问它的成员。使用泛型类型参数推断:

    public static int Foo<T>(T obj)
    {
        return obj.GetHashCode();
    }
    
    public static void Main()
    {
       var anonymousType = new { Id = 2, Name = "Second" };
       var value = Foo(anonymousType);
    }
    
        3
  •  1
  •   Tim Jarvis    14 年前

    C是一种强类型语言,添加匿名类型不会改变这一点。

    当然,可以向函数传递一个object类型的变量(或对象数组),

    private void MyFunction(object items)
    {
      //Typecast to whatever you like here....But frankly this is a "code smell"
    }
    

    也许你可以告诉我们你正在努力实现什么,也许有一个更好的设计。