现在想通过传入一个类型来实现泛型容器的初始化(例如Init(int),Init(float),Init(string)),但是怎么把Type转换为T呢?总是报错,请大家指教啊。下面是代码。
class Test
{
List<T> m_list;
void Init(Type tt)
{
m_list=new List<tt>();
}
}
class Test
{
List<T> m_list;
void Init(Type tt)
{
m_list=new List<tt>();
}
}
解决方案 »
- 在本机的时候上传、查看文件正常,发布在本机后上传正常,查看却无效了,求高人指点
- c# 对数据库操作(insert/updata/delete)
- 取部分时间问题
- 程序中如何设置DataGrid的某一行(比如第5行)的背景色根HeadText的背景色一致?
- 各位老大,这个Error是怎么回事呢?超时时间已到。在操作完成之前超时时间已过或服务器未响应
- 为什么datagrid中点击“修改”按钮后,不能呈现出“更新”与“取消”按钮
- 托管堆和线程堆栈,搞死我了.
- 邮件发送问题!急》》》》》》》
- vc# 中怎么建浮动工具条?象WORD中的工具条那样可任意拖曳,自动靠边的那种?
- Visual C#写的程序怎样才能在没装.NET的机器上运行?
- 急急,大侠这个怎么做啊
- 错误 1 “Employee.Login.Main()”是“方法”,但此处被当做“类型”来使用 D:\程序\WindowsForms\WindowsForms\
void Init(Type tt)
{
m_list=new List<tt>();//这段出现编译错误
}
我是想将类型当做值传入到init中,从而根据传入的tt类型实例化出不同类型的m_list
{
public List<T> m_list=new List<T>();
}
}使用方法:
Test<int> test = new Test<int>();
test.m_list.Add(1);
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Test<int> test = new Test<int>();
test.Init();
test.Add(1);
Console.WriteLine(test[0]);
Console.Read();
}
} class Test<T>
{
private List<T> _list;
public void Init()
{
_list = (List<T>)Activator.CreateInstance(typeof(List<>).MakeGenericType(typeof(T))); }
public void Add(T t)
{
_list.Add(t);
}
public T this[int i]
{
get { return _list[i]; }
}
}
}
pulbic class BaseCombo<T>:System.Windows.Forms.ComboBox
{
List<T> m_list=new List<T>();//
}
现在我们来继承这个BaseCombo,
pulbic class IntCombo<int>:BaseCombo<T>
{
}
要是string类型的combbox
pulbic class IntCombo<string>:BaseCombo<T>
{
}
但是实际上要用的数据类型还有很多,总不能每次用都要继承一次吧,太繁琐,我想做的是能不能定义一个下面类似的类:
pulbic class BaseCombo:System.Windows.Forms.ComboBox
{
List<T> m_list;//
void Init(Type tt)
{
m_list=new List<tt>();//具体的类型
}
}
所以我才会在上面问道哪个简化过的问题,还要请高手们指点啊
{
List<T> m_list=new List<T>();//
}
这个没什么问题。
但是为什么要做这个呢?
pulbic class IntCombo<int>:BaseCombo<T>
{
}用的时候直接BaseCombo<int> temp = new BaseCombo<int>();
为什么还要继承一次呢?范性不是你那么用的。
用Type来生成T这个想法就是不对的,泛型真不是这么玩的。
4楼的方法是可行的,但是如果不是必要,本人不推荐。
//根据对象类型克隆对象
ConstructorInfo[] ci = typeof(tt).GetConstructors();
object objClone = ci[0].Invoke(new object[0]);
4楼的方法是可行的,不过,如非必要,本人不推荐。