我试图做类似下面的事情,但它不起作用。为什么.NET不允许我这样做?
private void MyFunction(var items)
{
//whatever
}
答案 0 :(得分:7)
从Visual C#3.0开始,在方法范围声明的变量可以具有隐式类型var。隐式类型的局部变量是强类型的,就像您自己声明了类型一样,但编译器确定了类型。 i的以下两个声明在功能上是等效的:
var i = 10; // implicitly typed
int i = 10; //explicitly typed
换句话说,var
关键字仅允许用于本地范围的变量。
多一点信息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"
}
也许你可以告诉我们你想要达到的目标,也许有更好的设计。