我有如下通用方法,我想将T限制为只有Guid类型:
public static EntityFindApiResponse EntityFind<T>(
Credential cred, EntitiesApiClient entitiesApiClient, string clrType,
string propertyName, T searchKey)
where T: Guid
{
// ...
}
编译器告诉我
&#39;的System.Guid&#39;不是有效的约束。用作约束的类型必须是接口,非密封类或类型参数。
那么,为什么这不起作用?
答案 0 :(得分:5)
首先,事实证明Guid
是struct
。您无法为struct
设置通用约束,因为无法从struct
派生struct
(意味着您无法从where T: Guid
继承)。
除此之外,Guid
确实读取“其中T属于Guid
类型或来自struct
的类型”,并且因为没有任何内容可以从{{1}}派生,所以比如说“哪里的T是Guid类型”,它首先打破了仿制药的目的。
答案 1 :(得分:1)
Guid
是一个结构,这意味着它不符合要求:
用作约束的类型必须是接口,非密封类 或类型参数。