【问题标题】:How to convert anonymous type to IListSource, IEnumerable, or IDataSource如何将匿名类型转换为 IListSource、IEnumerable 或 IDataSource
【发布时间】:2013-03-01 06:27:28
【问题描述】:

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

【问题讨论】:

  • 那么你希望它是什么序列?单个值?
  • 这将是我的formview的数据源
  • 为什么要保留数据源anonymous?只需声明一个类 - 继承您的代码的开发人员可能知道您住在哪里;-)

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


【解决方案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 的答案对你来说是正确的,我猜你正在寻找一个匿名对象列表而不是一个匿名对象变成“可枚举”不是很容易从你的问题中知道什么对你有好处......我不会删除我的答案,所以任何其他寻找我第一个理解的东西的访问者仍然可以发现我的答案非常有用)。 p>

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

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

【讨论】:

  • @just_name 你需要正确标记你的问题。您的问题与 3.5 版本无关!
  • 很抱歉我之前没有听说过ExpandoObject,当你在回答中提到它时我会用谷歌搜索它。真的非常感谢:)
  • @just_name 每天都是扩展我们知识的好日子! :)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2017-02-04
    • 1970-01-01
    • 2017-04-25
    • 2011-04-25
    • 1970-01-01
    相关资源
    最近更新 更多