如何将匿名类型转换为IListSource,IEnumerable或IDataSource

时间:2013-03-13 10:55:48

标签: c# linq .net-3.5 ienumerable anonymous-types

我创建了以下anonymous type

  int group_id = 0;
  int dep_code = 0;
  int dep_year = 0;
  string dep_name = string.Empty;
  int boss_num = 0;
  string boss_name = string.Empty;
  var list =  new  { group_id = group_id, dep_code = dep_code, dep_year = dep_year, dep_name = dep_name, boss_num = boss_num, boss_name = boss_name };

如何转换为IListSource, IEnumerable, or IDataSource. ??

2 个答案:

答案 0 :(得分:3)

如果您只是想创建一个具有单个值的序列,则可以使用隐式类型化数组:

int group_id = 0;
int dep_code = 0;
int dep_year = 0;
string dep_name = string.Empty;
int boss_num = 0;
string boss_name = string.Empty;
var list =  new[] { 
    new { group_id, dep_code, dep_year, dep_name, boss_num, boss_name }
};

请注意,这使用投影初始值设定项,其中属性名称是从表达式推断出来的。

强烈鼓励您为变量使用常规名称,例如groupId。此外还不清楚dep在这里的含义 - 如果这是缩写,您可能需要扩展它以便清晰。

答案 1 :(得分:1)


注意

根据我的问题中的一些原始海报的评论,问题是关于.NET Framework 3.5。我自己重新标记了这个问题。 无论如何,我在这里留下这个答案,因为它可能在将来的原始海报和未来的访客中都很有用。


为什么不使用ExpandoObject

,而不是使用匿名对象
dynamic list = new ExpandoObject();
list.group_id = group_id;
list.dep_code = dep_code;
// ... and so on.

一个很棒的细节是ExpandoObject实施IDictionary<string, object>,宾果游戏:IDictionary<string, object>将有Values属性,实现IEnumerable<T>

IEnumerable<object> items = ((IDictionary<string, object>)list).Values;

更新

因为我看到Jon Skeet的答案对你来说是正确的,我想你是在找一个匿名对象列表而不是匿名对象变成“可枚举”它不是从你的问题中很容易知道哪些对你有好处...我不打算删除我的答案,所以任何寻找像我的第一个理解之类的东西的其他访客仍然可以找到我的答案非常有用)。

现在,更好地理解你的问题,你也可以这样做:

// Create a list of objects and you got it!
List<object> list = new List<object>();
list.Add(new { group_id, dep_code, dep_year, dep_name, boss_num, boss_name });