为什么不能使用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作为泛型类型约束?

首先,证明Guidstruct。您不能将通用约束设置为struct,因为struct s不能派生(这意味着您不能从struct继承)。

进一步说,where T: Guid实际上是"T属于Guid类型或从Guid派生的类型",因为没有任何东西可以从struct派生出来,这就像说"T属于Guid类型",这违背了泛型的目的。

Guid是一个结构体,这意味着它不符合要求:

用作约束的类型必须是一个接口,一个非密封类或类型参数