Avatar ·

如何在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?希望能有代码示例! <<>>

在类的非静态成员中使用typeof(T)

在C#中,在generic类或方法内部获取类型T,可以直接使用typeof(T),它适用于非静态成员。例如:

```csharp public class MyList { public void PrintType() { Console.WriteLine(typeof(T).Name); // 输出 "Int32" 或 "String" 等 } } ``` 调用: ```csharp var intList = new MyList(); intList.PrintType(); // 输出 "Int32" ``` 注意:C#在运行时保留泛型类型信息(不同于Java的类型擦除),因此typeof(T)在实例方法中完全有效。如果需要在静态方法中使用,需要将类型作为参数传递或使用反射。