在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});
....
}
使用反射
关于此主题的Microsoft文档。
using System;
using System.Collections;
using System.Collections.Generic;
var anonObj = new { Id = 1, Name = "Foo" };
var anonType = anonObj.GetType();
var listType = typeof(List<>);
// We know that List<> have only one generic argument, so we do this:
var contructed = listType.MakeGenericType(anonType);
// Create instance
var instance = Activator.CreateInstance(contructed);
// Using it
var list = (IList)instance;
list.Add(anonObj);
对于Dictionary<,>,您需要传递2个参数
例:dicType。MakeGenericType(type1, type2)
对于带有约束的泛型类型(其中T: struct),
我们需要做更多的核实。查看微软文档来学习如何操作。