C#面试题更新 2026-08-05

在 C# 中,为一个泛型类型参数指定多个约束条件时,应该采用怎样的语法形式?请举例说明。

技术原理C#

考察说明

考查对C#泛型类型参数多重约束的语法和用法的掌握程度。

回答思路

  1. 【回答框架 1】C#的泛型类型参数约束使用where关键字,每个类型参数后跟一个where子句。若要添加多个约束,在同一个where子句中用逗号分隔多个约束条件。
  2. 【回答框架 2】约束条件可以包括:接口约束(如IFoo)、基类约束(如SomeClass)、无参构造函数约束(new())、引用类型约束(class)、值类型约束(struct),以及notnull约束(C# 8+)。注意new()必须放在约束列表最后。
  3. 【回答框架 3】例如:public void MyMethod<T>(T item) where T : class, IDisposable, new() ,表示T必须是引用类型、实现IDisposable接口且具有无参构造函数。多个约束的先后顺序没有硬性规定,但new()必须放在最后。
  4. 【回答框架 4】如果泛型类型有多个类型参数,每个类型参数可以单独使用where子句,例如where T : class, IComparable<T> where U : struct,它们之间是并列关系。
  5. 【关键点 1】使用where子句,多个约束用逗号分隔。
  6. 【关键点 2】new()必须放在约束列表最后。
  7. 【关键点 3】每个类型参数可以有独立的where子句。
  8. 【易错点 1】容易混淆多个where子句与同一where中逗号分隔的区别。
  9. 【易错点 2】容易忘记new()约束必须放在最后。