使用"where"关键字将通用候选者限制为一个类,这也是一个通用的

Jac*_*019 1 c# generics

假设我有一个系列

public class TimeSeries<T,K>
Run Code Online (Sandbox Code Playgroud)

我想构建一个具有可以存储TimeSeries为元素的列表成员的类,所以我使用:

public class TimeSeriesSet<M> where M: TimeSeries<T, K>
Run Code Online (Sandbox Code Playgroud)

我想知道什么是正确的语法?

Lua*_*aan 5

你可以这样做:

public class TimeSeriesSet<T, K>
{
  public TimeSeries<T, K> SomeField;
}
Run Code Online (Sandbox Code Playgroud)

根本不需要使用约束.如果你实际上不打算使用它们,请不要使用泛型类型参数;)

你想要添加另一个类型参数的唯一原因是你想要一些明确的后代TimeSeries<T, K>.在这种情况下,只需将其添加为另一个类型参数:

public class TimeSeriesSet<M, T, K>
  where M: TimeSeries<T, K>
{
  public M SomeField;
}
Run Code Online (Sandbox Code Playgroud)

通常,通用性倾向于传播.如果你需要泛型通用的东西,你需要两个泛型类型的参数.值得庆幸的是,类型推断通常有效.通常.