通八洲科技

c# 泛型 T 是什么意思

日期:2026-01-01 00:00 / 作者:畫卷琴夢
T是泛型类型参数占位符,非固定类型或关键字;编译时替换为具体类型生成专用代码,兼顾类型安全与性能,避免object装箱和dynamic失去编译检查。

T 就是你用的时候才填进去的类型占位符,不是某种固定类型,也不是关键字,它就是个“代号”。 比如 List 本身不能直接 new,你必须写成 ListList —— 这时 T 才被替换成具体类型,编译器才真正生成对应代码。

为什么非得用 T,不用 object 或 dynamic?

object 看似通用,但会引发两个硬伤:

List 在编译期就锁死类型——list.Add("abc")List 里加,根本过不了编译

T 可以换成别的名字吗?

完全可以。T 只是约定俗成的单字母缩写,源于 “Type”。你写 class Boxclass Repository 甚至 class Pipe 都合法。

但要注意:

泛型方法里的 T 怎么用?

泛型方法把类型选择权交给调用方,而不是类本身。例如:

public static T GetFirst(IList list)
{
    return list.Count > 0 ? list[0] : default;
}

调用时可以显式指定:GetFirst(myStrings),也可以让编译器推断:GetFirst(myInts)(前提是 myIntsList 这类明确类型的集合)。

容易踩的坑:

真正关键的一点是:T 不是运行时“动态决定”的类型,而是编译时由你填写后,CLR 为每种实际类型(intCustomerGuid)生成独立的专用版本。所以它既类型安全,又没装箱开销——这不是妥协出来的方案,是 C# 泛型设计的底层逻辑。