【发布时间】:2017-07-26 15:38:08
【问题描述】:
在 C# 中我有这样的情况:
class ModelBase<TKey>
{
TKey Id { get; set; }
}
class Repo<TModel, TKey> :
where TModel : ModelBase<TKey>
{
//code where I access both TModel and TKey types
}
在我的 Repo 类中,我需要同时访问 TModel 和 TKey,但是当我指定 TModel 参数时,模式匹配系统应该能够自动提取 TKey。
为了使用TKey 泛型类型,我必须将其声明为泛型参数,因此每次需要创建 Repo 时,我都必须指定特定的模型和相关键类型。我怎样才能消除显式键类型的需要,并通过模式匹配提取它?首选在编译时使用验证的解决方案。
【问题讨论】:
-
据我所知,你不能。您必须包括所有泛型类型。很可能在您的
Repo中,您将有一个方法来通过它的ID 检索您的ModelBase对象。在这种情况下,无论如何您都需要TKey类型作为参数。打字很烦人,如果他们能从第一个泛型参数中推断出来,那就很好,但我们到了。
标签: c# generics pattern-matching