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

时间:2010-07-07 21:42:10

标签: .net linq anonymous-types

我试图做类似下面的事情,但它不起作用。为什么.NET不允许我这样做?

private void MyFunction(var items)
{
 //whatever
}

3 个答案:

答案 0 :(得分:7)

  

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

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

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

Source

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

答案 1 :(得分:2)

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

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);
}

答案 2 :(得分:1)

C#是一种强类型语言,添加匿名类型并没有改变它。

您当然可以将类型对象(或对象数组)的变量传递给函数

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

也许你可以告诉我们你想要达到的目标,也许有更好的设计。