为什么不能使用Guid作为泛型类型约束?
本文关键字:泛型类型 约束 Guid 不能 为什么 | 更新日期: 2023-09-27 18:17:53
我有这个泛型方法如下,我想限制T只能是Guid类型,像这样:
public static EntityFindApiResponse EntityFind<T>(
Credential cred, EntitiesApiClient entitiesApiClient, string clrType,
string propertyName, T searchKey)
where T: Guid
{
// ...
}
编译器告诉我
"系统。Guid'不是一个有效的约束。用作约束的类型必须是接口、非密封类或类型参数。
那么,为什么这个不起作用呢?
首先,证明Guid
是struct
。您不能将通用约束设置为struct
,因为struct
s不能派生(这意味着您不能从struct
继承)。
进一步说,where T: Guid
实际上是"T属于Guid
类型或从Guid
派生的类型",因为没有任何东西可以从struct
派生出来,这就像说"T属于Guid类型",这违背了泛型的目的。
Guid
是一个结构体,这意味着它不符合要求:
用作约束的类型必须是一个接口,一个非密封类或类型参数