为什么我不能使用Guid作为泛型类型约束?

时间:2014-08-12 17:28:34

标签: c# generics types constraints

我有如下通用方法,我想将T限制为只有Guid类型:

public static EntityFindApiResponse EntityFind<T>(
    Credential cred, EntitiesApiClient entitiesApiClient, string clrType, 
    string propertyName, T searchKey)
    where T: Guid
{
    // ...
}

编译器告诉我

  

&#39;的System.Guid&#39;不是有效的约束。用作约束的类型必须是接口,非密封类或类型参数。

那么,为什么这不起作用?

2 个答案:

答案 0 :(得分:5)

首先,事实证明Guidstruct。您无法为struct设置通用约束,因为无法从struct派生struct(意味着您无法从where T: Guid继承)。

除此之外,Guid确实读取“其中T属于Guid类型或来自struct的类型”,并且因为没有任何内容可以从{{1}}派生,所以比如说“哪里的T是Guid类型”,它首先打破了仿制药的目的。

答案 1 :(得分:1)

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

  

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