如何在C#中从泛型类或方法的实例获取类型T?
大家好!我是C#新手,遇到了泛型类型的问题。假设我有一个generic类:
```csharp
public class MyList
{
private List items = new List();
public void Add(T item)
{
items.Add(item);
}
}
```
然后我创建它的实例:
```csharp
var intList = new MyList();
```
现在在类内部,我想知道T具体是什么类型。例如,如果T是int,我想在控制台输出"int"。我尝试过写`typeof(T)`,但在静态上下文中不起作用,而且我不确定如何从实例获取类型。我还听说由于运行时的类型擦除,这可能很复杂。在Java中我会使用Class,但在C#中方法不同。如何正确地从泛型类或方法的实例获取类型T?希望能有代码示例!
<<>>
在类的非静态成员中使用
{
public void PrintType()
{
Console.WriteLine(typeof(T).Name); // 输出 "Int32" 或 "String" 等
}
}
```
调用:
```csharp
var intList = new MyList();
intList.PrintType(); // 输出 "Int32"
```
注意:C#在运行时保留泛型类型信息(不同于Java的类型擦除),因此
在类的非静态成员中使用typeof(T)
在C#中,在generic类或方法内部获取类型T,可以直接使用typeof(T),它适用于非静态成员。例如:
typeof(T)在实例方法中完全有效。如果需要在静态方法中使用,需要将类型作为参数传递或使用反射。