2009-11-25 57 views
0

我可以在参数声明中将对象结构定义为方法的参数,而无需创建类型吗?在方法中定义一个匿名结构作为参数

我对LINQ启发SQL查询,你可以在一个新的对象的形式返回的查询结果的子集,其中:

var query = from t in dc.Table select new { Foo = t.column }; 

回答

1

什么你所描述的是不可能的。在Linq to Sql查询的情况下,C#编译器创建一个名为Foo的属性与t.column具有相同类型的匿名类型。然后使用类型推理,并且变量“query”实际上被强类型化为这个匿名类型(这就是为这个变量提供intellisense的好处)。

使用“var”作为参数类型是不可能的,因为无法推断参数的类型,它需要调用表达式来决定参数的实际类型。

,你可以做的是使用仿制药,并通过性能循环最好的:

public static void Print<T>(T obj) 
{ 
    Type type = typeof(T); 
    PropertyInfo[] properties = type.GetProperties(); 
    foreach(PropertyInfo pi in properties) 
    { 
     Console.WriteLine(pi.Name + ": " + pi.GetValue(obj, null)); 
    } 
} 

,让你使用匿名类型(或任何类型为此事)为参数的“简陋”的能力。

1

不,你不能声明匿名类型一个输入参数,你不能返回它,除非你把它作为一个对象返回。如果你愿意的话,请参阅this blog post,这是一个非常方便的解决方法,但这实际上仍然只是来回装箱和拆箱,因此实际上并不比把它当作一个对象更好。

0

参数对于不能直接使用的函数有用吗?函数参数应该有助于文档的功能。