如何将匿名类型作为参数传递给其他函数?考虑这个例子:
var query = from employee in employees select new { Name = employee.Name, Id = employee.Id };
LogEmployees(query);
这里的变量query
没有强类型。我应该如何定义我的LogEmployees
函数才能接受它?
public void LogEmployees (? list)
{
foreach (? item in list)
{
}
}
换句话说,我应该使用什么来代替?
标记。
发布于 2011-07-08 21:05:52
你可以这样做:
public void LogEmployees<T>(List<T> list) // Or IEnumerable<T> list
{
foreach (T item in list)
{
}
}
..。但是你不会对每一项都做太多的事情。你可以调用ToString,但是你不能直接使用(比如说) Name
和Id
。
发布于 2009-04-22 01:36:49
不幸的是,你想要做的事情是不可能的。在幕后,query变量的类型是匿名类型的IEnumerable
。匿名类型名不能在用户代码中表示,因此无法将其作为函数的输入参数。
最好的方法是创建一个类型,并将其用作查询的返回值,然后将其传递给函数。例如,
struct Data {
public string ColumnName;
}
var query = (from name in some.Table
select new Data { ColumnName = name });
MethodOp(query);
...
MethodOp(IEnumerable<Data> enumerable);
不过,在本例中,您只选择了一个字段,因此直接选择该字段可能会更容易。这将导致查询被类型化为字段类型的IEnumerable
。在本例中,为列名。
var query = (from name in some.Table select name); // IEnumerable<string>
发布于 2014-05-22 14:18:17
"dynamic“也可以用于此目的。
var anonymousType = new { Id = 1, Name = "A" };
var anonymousTypes = new[] { new { Id = 1, Name = "A" }, new { Id = 2, Name = "B" };
private void DisplayAnonymousType(dynamic anonymousType)
{
}
private void DisplayAnonymousTypes(IEnumerable<dynamic> anonymousTypes)
{
foreach (var info in anonymousTypes)
{
}
}
https://stackoverflow.com/questions/6624811
复制相似问题