面试题答案
一键面试作用
where T : struct
这种类型约束表示泛型类型参数 T
必须是值类型。这确保了在使用泛型的代码中,T
只能被替换为诸如 int
、bool
、struct
自定义结构体等值类型,而不能是引用类型。这样做有以下好处:
- 性能优化:值类型通常在栈上分配,相较于引用类型在堆上分配,减少了垃圾回收的压力,在对性能敏感的场景下有更好的表现。
- 明确类型特性:让代码的使用者清楚知道泛型参数的类型特性,避免将引用类型误传入。
场景举例
- 简单数据存储结构:实现一个简单的泛型栈结构,由于栈操作对性能要求较高,并且栈内元素通常为值类型,使用
where T : struct
约束可确保性能。
public class Stack<T> where T : struct
{
private T[] items;
private int top;
public Stack(int capacity)
{
items = new T[capacity];
top = -1;
}
public void Push(T item)
{
if (top == items.Length - 1)
{
// 处理栈满情况
}
items[++top] = item;
}
public T Pop()
{
if (top == -1)
{
// 处理栈空情况
}
return items[top--];
}
}
- 数学计算相关泛型方法:例如实现一个求两个泛型类型参数之和的方法,用于基本数值类型(值类型)的计算。
public static class MathUtils
{
public static T Add<T>(T a, T b) where T : struct, IAdditionOperators<T, T, T>
{
return a + b;
}
}
这里 where T : struct, IAdditionOperators<T, T, T>
不仅要求 T
是值类型,还要求 T
实现了加法操作符,使得该方法可用于数值类型的加法运算,如 int
、float
等。