首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将匿名类型作为参数传递?

如何将匿名类型作为参数传递?
EN

Stack Overflow用户
提问于 2011-07-08 21:03:10
回答 6查看 153.4K关注 0票数 161

如何将匿名类型作为参数传递给其他函数?考虑这个例子:

代码语言:javascript
复制
var query = from employee in employees select new { Name = employee.Name, Id = employee.Id };
LogEmployees(query);

这里的变量query没有强类型。我应该如何定义我的LogEmployees函数才能接受它?

代码语言:javascript
复制
public void LogEmployees (? list)
{
    foreach (? item in list)
    {

    }
}

换句话说,我应该使用什么来代替?标记。

EN

回答 6

Stack Overflow用户

发布于 2011-07-08 21:05:52

你可以这样做:

代码语言:javascript
复制
public void LogEmployees<T>(List<T> list) // Or IEnumerable<T> list
{
    foreach (T item in list)
    {

    }
}

..。但是你不会对每一项都做太多的事情。你可以调用ToString,但是你不能直接使用(比如说) NameId

票数 46
EN

Stack Overflow用户

发布于 2009-04-22 01:36:49

不幸的是,你想要做的事情是不可能的。在幕后,query变量的类型是匿名类型的IEnumerable。匿名类型名不能在用户代码中表示,因此无法将其作为函数的输入参数。

最好的方法是创建一个类型,并将其用作查询的返回值,然后将其传递给函数。例如,

代码语言:javascript
复制
struct Data {
  public string ColumnName; 
}

var query = (from name in some.Table
            select new Data { ColumnName = name });
MethodOp(query);
...
MethodOp(IEnumerable<Data> enumerable);

不过,在本例中,您只选择了一个字段,因此直接选择该字段可能会更容易。这将导致查询被类型化为字段类型的IEnumerable。在本例中,为列名。

代码语言:javascript
复制
var query = (from name in some.Table select name);  // IEnumerable<string>
票数 19
EN

Stack Overflow用户

发布于 2014-05-22 14:18:17

"dynamic“也可以用于此目的。

代码语言:javascript
复制
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)
   {

   }
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6624811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档