为了账号安全,请及时绑定邮箱和手机立即绑定

匿名类的通用列表

匿名类的通用列表

慕田峪7331174 2019-08-30 10:57:23
匿名类的通用列表在C#3.0中,您可以使用以下语法创建匿名类var o = new { Id = 1, Name = "Foo" };有没有办法将这些匿名类添加到通用列表?例:var o = new { Id = 1, Name = "Foo" };var o1 = new { Id = 2, Name = "Bar" };List<var> list = new List<var>();list.Add(o);list.Add(o1);另一个例子:List<var> list = new List<var>();while (....){    ....    list.Add(new {Id = x, Name = y});    ....}
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

你可以这样做:


var list = new[] { o, o1 }.ToList();

有很多方法可以为这只猫设置皮肤,但基本上它们都会在某处使用类型推断 - 这意味着你必须调用泛型方法(可能作为扩展方法)。另一个例子可能是:


public static List<T> CreateList<T>(params T[] elements)

{

     return new List<T>(elements);

}


var list = CreateList(o, o1);

你明白了:)


查看完整回答
反对 回复 2019-08-30
?
慕森卡

TA贡献1806条经验 获得超8个赞

有很多方法可以做到这一点,但是这里的一些响应是创建一个包含垃圾元素的列表,这需要您清除列表。


如果要查找泛型类型的空列表,请使用“针对元组列表选择”来创建空列表。不会实例化任何元素。


这是创建空列表的单线程:


 var emptyList = new List<Tuple<int, string>>()

          .Select(t => new { Id = t.Item1, Name = t.Item2 }).ToList();

然后您可以使用您的泛型类型添加到它:


 emptyList.Add(new { Id = 1, Name = "foo" });

 emptyList.Add(new { Id = 2, Name = "bar" });

作为替代方案,您可以执行类似下面的操作来创建空列表(但是,我更喜欢第一个示例,因为您也可以将它用于填充的元组集合):


 var emptyList = new List<object>()

          .Select(t => new { Id = default(int), Name = default(string) }).ToList();   


查看完整回答
反对 回复 2019-08-30
  • 3 回答
  • 0 关注
  • 456 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信