C# 如何在函数C中声明泛型类型T作为对象# 公共静态列表GetColumnValuesByHeader(字符串docName) { //作为客户或员工,我如何在这里获得T? } 列出客户=GetColumnValuesByHeader(“customers.dat”) List employees=GetColumnValuesByHeader(“employees.dat”)

C# 如何在函数C中声明泛型类型T作为对象# 公共静态列表GetColumnValuesByHeader(字符串docName) { //作为客户或员工,我如何在这里获得T? } 列出客户=GetColumnValuesByHeader(“customers.dat”) List employees=GetColumnValuesByHeader(“employees.dat”),c#,C#,使用typeof(T): 公共静态列表GetColumnValuesByHeader(字符串docName) { //将适当地打印客户或员工 控制台写入线(类型为(T)); } 现在,你以后会怎么做取决于你 如果您确实需要以不同的方式处理这些情况,那么我很想先编写不同的方法。泛型实际上是为任何类型的算法设计的。当然,每个规则都有例外,比如Enumerable.Count中的优化。。。例如,如果您通过反射获取属性,那么这就是合理使用typeof(T)使用typeof(T): 公共静态列表GetC

使用
typeof(T)

公共静态列表GetColumnValuesByHeader(字符串docName)
{
//将适当地打印客户或员工
控制台写入线(类型为(T));
}
现在,你以后会怎么做取决于你

如果您确实需要以不同的方式处理这些情况,那么我很想先编写不同的方法。泛型实际上是为任何类型的算法设计的。当然,每个规则都有例外,比如
Enumerable.Count
中的优化。。。例如,如果您通过反射获取属性,那么这就是合理使用
typeof(T)

使用
typeof(T)

公共静态列表GetColumnValuesByHeader(字符串docName)
{
//将适当地打印客户或员工
控制台写入线(类型为(T));
}
现在,你以后会怎么做取决于你


如果您确实需要以不同的方式处理这些情况,那么我很想先编写不同的方法。泛型实际上是为任何类型的算法设计的。当然,每个规则都有例外,比如
Enumerable.Count
中的优化。。。例如,如果您通过反射获取属性,那么这就是合理使用
typeof(T)

您可以使用typeof获取T的类型

if (type of T Is Customer) {
 //Perform action for customer
} else

if (type of T Is Employee) {
 //Perform action for Employee
}

您可以使用typeof.获得T的类型

if (type of T Is Customer) {
 //Perform action for customer
} else

if (type of T Is Employee) {
 //Perform action for Employee
}

假设您想创建许多
T
来填充列表,最简单的方法是使用
Activator.CreateInstance()。不过,您需要将
where T:new()
约束添加到您的方法中,以简化此过程。它将假设客户和员工都有一个默认构造函数-如果不是这样,您仍然可以使用
CreateInstance()
,但是您需要通过获取每个类型的
ConstructorInfo
来获取正确的参数来传递。

假设您想要创建许多
t
来填充列表,最简单的方法是使用
Activator.CreateInstance()。不过,您需要将
where T:new()
约束添加到您的方法中,以简化此过程。它将假设客户和员工都有一个默认构造函数-如果不是这样,您仍然可以使用
CreateInstance()
,但是,您需要通过获取每种类型的
构造函数info
来获取要传递的正确参数。

正如Jon Skeet所说,您可以使用typeof获取T的类型。您还可以使用创建该类的实例

Type t = typeof(T);
if (t == typeof(Employee))
{
    //Do something here ...
}

正如Jon Skeet所说,您可以使用typeof获得T的类型。您还可以使用创建该类的实例

Type t = typeof(T);
if (t == typeof(Employee))
{
    //Do something here ...
}

如果您发现自己需要以不同的方式对待不同的
T
s,这表明该方法首先可能不应该是
T
中的泛型方法。Eek-如果我们需要在泛型中包含特定类型的代码,那么为什么我们需要泛型?@Webbies:您想获得
T
系统。type
(如果是这样,请参见Jon Skeet的回答),或者更确切地说,是
员工
/
客户
类型的实际对象(然后参见Mark H的回答)?如果您发现自己需要以不同的方式对待不同的
T
s,这表明该方法首先可能不应该是
T
中的泛型方法。Eek-如果我们需要在泛型中包含特定于类型的代码,那么为什么我们需要泛型?@Webbies:您想获得
T
系统。type
(如果是这样,请参见Jon Skeet的答案),或者更确切地说,是类型为
Employee
/
Customer
(然后参见Mark H的答案)的实际对象?如果您不打算传入任何参数,则添加一个约束,只需调用
new T()
.Ya谢谢Jon和Fermin。我想设置T类型属性的值。它可以工作。如果你不想传入任何参数,那么添加一个约束并调用
new T()
。Ya谢谢Jon和Fermin。我想设置T类型属性的值。它可以工作。是的,这是一个VB代码。对不起,在C中,应该是typeof(T)==客户,和平是的,这是一个VB代码对不起。在C中,应该是typeof(T)==客户,和平
Type theType = typeof(T);
object obj = Activator.CreateInstance(theType);