2013-03-13 71 views
0
的IDataSource我

创建以下anonymous type如何匿名类型转换为IListSource,IEnumerable的,或

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. ??

+1

那么你怎么想它是序列?单一的价值? – 2013-03-13 10:56:52

+0

这将是我的'formview'的数据源 – 2013-03-13 10:57:38

+0

为什么你想让你的数据源'匿名'?只要声明一个类 - 一个继承你的代码的开发人员可能知道你住在哪里;-) – 2013-03-13 10:59:44

回答

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

基于对我的问题的一些原始的海报的评论,问题是关于.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; 

更新

因为我看到乔恩斯基特的答案是为您正确的,我想你要找的匿名对象的列表,而不是一个匿名对象变成“枚举”从你的问题中知道什么对你有好处并不容易......我不会删除我的答案,所以其他任何寻找类似我的第一个理解的访问者仍然可以找到我的答案非常有用)。

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

// 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 }); 
+0

非常感谢,但我使用框架3.5 :( – 2013-03-13 11:06:36

+1

@just_name你需要**正确**标记你的问题然后。约3.5版本! – 2013-03-13 11:07:14

+0

对不起,我没有听说过'ExpandoObject'之前,我google它时,它提到它在你的答案.really谢谢很多:) – 2013-03-13 11:14:25

相关问题