0

我创建以下内容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.??

4

2 回答 2

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这里是什么意思 - 如果这是一个缩写,您可能需要扩展它以清楚起见。

于 2013-03-13T10:57:47.223 回答
1

笔记

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


你为什么不使用匿名对象而不是使用匿名对象ExpandoObject

dynamic list = new ExpandoObject();
list.group_id = group_id;
list.dep_code = dep_code;
// ... and so on.

一个很好的细节是ExpandoObjectimplements IDictionary<string, object>,而 bingo:IDictionary<string, object>将有一个Values属性,它 implements 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 });
于 2013-03-13T11:00:34.993 回答