我试图做下面的事情,但它不起作用。为什么.NET不会让我这样做?为什么我无法将匿名类型作为参数传递给函数?
private void MyFunction(var items)
{
//whatever
}
我试图做下面的事情,但它不起作用。为什么.NET不会让我这样做?为什么我无法将匿名类型作为参数传递给函数?
private void MyFunction(var items)
{
//whatever
}
在Visual C#3.0开始,那些在方法范围声明的变量可以具有隐式类型变种。一个隐式类型的局部变量是强类型的,就像你自己声明了类型一样,但是编译器决定了类型。我的下面两个声明在功能上等同:
var i = 10; // implicitly typed
int i = 10; //explicitly typed
。换句话说,var
关键字只适用于局部范围的变量。
一点点更多信息here。基本上,在使用var
时,还必须将变量初始化为同一行上的值,以便编译器知道它是什么类型。
我不知道动态关键字在这里有什么用处... – 2012-05-30 13:50:39
@VincentVancalbergh我认为'动态'会提供OP之后的使用。 – Nate 2012-05-30 13:53:24
C#是一种强类型语言,匿名类型的添加并没有改变这一点。
你当然可以通过类型对象(或对象数组)的函数的变量,
private void MyFunction(object items)
{
//Typecast to whatever you like here....But frankly this is a "code smell"
}
也许你能告诉我们你想达到什么目的,也许有更好的设计。
严格地说,你可以传递匿名类型作为参数,但是你不能以强类型的方式访问它的成员。使用泛型类型参数推断:
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);
}
只是FYI,用'var'定义的变量是隐式类型的,而不是匿名的。匿名类型是完全不同的球类游戏。 'var'可以与匿名类型一起使用,但并不意味着对象*是*匿名类型。 – Nate 2010-07-07 21:48:33