private void Call()
{
List<int> numbers= Get<List<int>>();
MessageBox.Show("Numbers amount " + numbers.Count);
}
private T Get<T>()
{
T list = Activator.CreateInstance<T>();
int a = 1;
//HOW TO ADD "A" TO THE T-object [which is a list...]?
return list;
}
是否可以让“T”成为一个列表?我的意思是,它可能(它编译),但是如何将对象添加到这些列表中呢?
答案 0 :(得分:1)
我相信你想要:
private static T Get<T>() where T : IList
{
T list = Activator.CreateInstance<T>();
int a = 1;
(list as IList).Add(a);
return list;
}
答案 1 :(得分:0)
如果你的T
总是应该能够添加整数,那么你实际上说的是它实现了ICollection<int>
。将ICollection<int>
添加为类型约束后,您应该可以非常轻松地执行此操作:
private T Get<T>() where T: ICollection<int>, new
{
T coll = new T();
int a = 1;
coll.Add(a);
return coll;
}
如上所述in the comments,您也可以避免使用Activator.CreateInstance
,因为您不需要任何构造函数参数。
现在你可以使用:
var myList = Get<List<int>>();
Console.WriteLine(myList.Count); // Should be 1
以下是演示:http://ideone.com/0pjFoJ
答案 2 :(得分:0)
Asad说,但是如果你想要一个通用的方法来获取一个列表,我会建议调用GetList并执行以下操作(注意添加是在lambda中完成的,这样你可以添加你想要的任何东西或提供一个函数这样做):
private void Call()
{
List<int> numbers = GetList<int>(l =>
{
l.Add(1);
l.Add(2);
//etc
});
MessageBox.Show("Numbers amount " + numbers.Count);
}
private List<T> GetList<T>(Action<List<T>> initList)
{
List<T> list = Activator.CreateInstance<List<T>>();
initList(list);
return list;
}