我可以在参数声明中将对象结构定义为方法的参数,而无需创建类型吗?
我受到LINQ to SQL查询的启发,您可以以新对象的形式返回查询结果的子集:
var query = from t in dc.Table select new { Foo = t.column };
答案 0 :(得分:1)
不,您不能将匿名类型声明为输入参数,除非将其作为对象返回,否则无法返回它。如果你愿意的话,请参阅this blog post以获得一个hacky变通方法,但是这仍然只是来回装箱和拆箱类型,所以它实际上并不比将其视为对象更好。
答案 1 :(得分:1)
答案 2 :(得分:1)
你所描述的是不可能的。对于Linq to Sql查询,C#编译器创建一个匿名类型,其中包含一个名为Foo的属性,其类型与t.column相同。然后使用类型推理,变量“query”实际上是强类型的匿名类型(这使得你对这个变量有智能感知)。
使用“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));
}
}
为您提供了一种“基本”能力,可以将匿名类型(或任何类型)用作参数。
答案 3 :(得分:0)
对于不能直接使用的函数的参数有多大用处?函数参数应该有助于记录函数。