假设我在一个类或方法中有一个泛型成员,如下所示:

public class Foo<T>
{
    public List<T> Bar { get; set; }
    
    public void Baz()
    {
        // get type of T
    }   
}

当我实例化该类时,T变成了MyTypeObject1,因此该类有一个泛型列表属性:List<MyTypeObject1>.这同样适用于非泛型类中的泛型方法:

public class Foo
{
    public void Bar<T>()
    {
        var baz = new List<T>();
        
        // get type of T
    }
}

我想知道我的班级列表包含什么类型的对象.那么,名为Bar的列表属性或局部变量baz包含哪种类型的T呢?

我不能做Bar[0].GetType(),因为列表可能包含零个元素.我该怎么做呢?

推荐答案

如果我理解正确,列表的类型参数与容器类本身相同.如果是这样,那么:

Type typeParameterType = typeof(T);

如果您幸运地将object作为类型参数,请参见Marc's answer.

.net相关问答推荐

为什么$NULL在ForEach-Object{}和Foreach()中的行为不同?

MSBuild:CopyToOutputDirectory不会将本机DLL复制到输出

获取Ef-Core集合的DeleteBehavior

在 .NET 7 项目上设置 Sentry 时遇到问题

Dotnet 反射:使用 F# 中的out参数调用 MethodInfo 上的调用

为什么 C# 多维数组不实现 IEnumerable

什么是 SUT,它来自哪里?

如何退出所有正在运行的线程?

哪个更快:清除集合或实例化新的

变量MyException已声明但从未使用

.NET 事件 - 什么是对象发送者和 EventArgs e?

如何允许程序集(单元测试)访问另一个程序集的内部属性?

如何从 XDocument 获取 Xml 作为字符串?

Microsoft.Bcl.Build NuGet 包有什么作用?

C# List<> 按 x 然后 y 排序

Guid.Parse() 或 new Guid() - 有什么区别?

如何在 Dapper.Net 中编写一对多查询?

DateTime.Compare 如何判断日期是否小于 30 天?

铸造:(NewType)与对象作为NewType

如何在 C# 中使用迭代器反向读取文本文件