首页 > C# > 如何从泛型类或方法的成员获取 T 的类型

如何从泛型类或方法的成员获取 T 的类型

上一篇 下一篇

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

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

当我实例化类时,变成 ,所以该类有一个泛型列表属性:。这同样适用于非泛型类中的泛型方法:TMyTypeObject1List<MyTypeObject1>

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

我想知道我的类列表包含什么类型的对象。那么调用的列表属性或局部变量包含什么类型呢?TBarbaz

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

分割线

网友回答:

如果我理解正确,您的列表与容器类本身具有相同的类型参数。如果是这种情况,则:

Type typeParameterType = typeof(T);

如果你有幸拥有作为类型参数,请参阅 Marc 的答案。object

分割线

网友回答:

(注意:我假设你所知道的都是或或类似的,并且列表在运行时可以是任何类型的)objectIList

如果您知道它是一个 ,那么:List<T>

Type type = abc.GetType().GetGenericArguments()[0];

另一种选择是查看索引器:

Type type = abc.GetType().GetProperty("Item").PropertyType;

使用新的类型信息:

using System.Reflection;
// ...
var type = abc.GetType().GetTypeInfo().GenericTypeArguments[0];

分割线

网友回答:

使用以下扩展方法,您可以摆脱而无需反射:

public static Type GetListType<T>(this List<T> _)
{
    return typeof(T);
}

或更一般:

public static Type GetEnumeratedType<T>(this IEnumerable<T> _)
{
    return typeof(T);
}

用法:

List<string>        list    = new List<string> { "a", "b", "c" };
IEnumerable<string> strings = list;
IEnumerable<object> objects = list;

Type listType    = list.GetListType();           // string
Type stringsType = strings.GetEnumeratedType();  // string
Type objectsType = objects.GetEnumeratedType();  // BEWARE: object

模板简介:该模板名称为【如何从泛型类或方法的成员获取 T 的类型】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 203次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 03-13
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
响应式 html5 企业网站 微信素材 微信公众平台 单页式简历模板 微信文章 自适应 微信图片 微信模板
您可能会喜欢的其他模板