public static List<T> GetColumnValuesByHeader<T>(string docName)
{
// How can i get T as Customer or Employee in here?
}
List<Customer> customers = GetColumnValuesByHeader<Customer>("Customers.dat")
List<Employee> employees= GetColumnValuesByHeader<Employee>("Employees.dat")
答案 0 :(得分:4)
使用typeof(T)
:
public static List<T> GetColumnValuesByHeader<T>(string docName)
{
// Will print Customer or Employee appropriately
Console.WriteLine(typeof(T));
}
现在你究竟用它做什么取决于你......
如果你真的需要以不同的方式处理这些案例,那么我很想写一些单独的方法来开始。泛型实际上是针对任何类型的行为相同的算法而设计的。当然,每条规则都有例外 - 例如Enumerable.Count<T>
中的优化......例如,如果您通过反射获取属性,那么这是合理使用typeof(T)
。
答案 1 :(得分:2)
正如Jon Skeet所说,您可以使用typeof来获取T的类型。您还可以使用Activator class来创建该类的实例。
Type theType = typeof(T);
object obj = Activator.CreateInstance(theType);
答案 2 :(得分:1)
假设您要创建许多T
来填充列表,最简单的方法是使用Activator.CreateInstance<T>();
。您希望将where T : new()
约束添加到您的方法中,以简化此操作。它假设Customer和Employee都有一个默认构造函数 - 如果不是这样,你仍然可以使用CreateInstance()
,但你需要通过获取{{1}来获取正确的参数。对于每种类型。
答案 3 :(得分:0)
您可以使用typeof ..
获取T的类型Type t = typeof(T);
if (t == typeof(Employee))
{
//Do something here ...
}
答案 4 :(得分:-2)
if (type of T Is Customer) {
//Perform action for customer
} else
if (type of T Is Employee) {
//Perform action for Employee
}