我已经看过其他类似的问题,但问题是语法错误.也许我错过了一些东西,但据我所知,我的语法看起来是正确的.我正在尝试声明一个方法如下:
internal IDictionary<string, T> FillObjects(
IReadableRange<T> svc,
Func<T, string> getKey) where T : BaseEntity
{
}
Run Code Online (Sandbox Code Playgroud)
但我得到编译器错误:
非泛型声明不允许使用约束
有任何想法吗?
谢谢
马特
Eug*_*kal 10
问题是您的方法没有定义泛型类型<T>.它只使用T封闭类型给出的类型.
并且您只能在定义通用参数的同一位置声明约束.
有两种解决方案:
1.,您应该在函数上定义泛型参数:
public class EnclosingType
{
internal IDictionary<string, T> FillObjects<T>(
IReadableRange<T> svc,
Func<T, string> getKey) where T : BaseEntity
{
}
}
Run Code Online (Sandbox Code Playgroud)
在你的情况下,它不会编译,因为你EnclosingType可能EnclosingType<T> 会导致EnclosingType's T和之间的歧义FillObjects' T:
2.,或者您可以在封闭类型上定义约束:
public class EnclosingType<T>
where T : BaseEntity
{
internal IDictionary<string, T> FillObjects(
IReadableRange<T> svc,
Func<T, string> getKey)
{
}
}
Run Code Online (Sandbox Code Playgroud)
您T在方法名称中缺少(您的泛型类型)的声明。如果它没有在封装类中声明,则必须显式声明它:
internal IDictionary<string, T> FillObjects<T>(
IReadableRange<T> svc,
Func<T, string> getKey) where T : BaseEntity
{
}
Run Code Online (Sandbox Code Playgroud)
约束需要与泛型参数位于同一位置.因此,如果<T>是课程的一部分,约束需要成为整体的一部分.
class GenericClass<T> where T : BaseEntity
Run Code Online (Sandbox Code Playgroud)
或作为方法的一部分:
T GenericMethod<T>(T param) where T : BaseEntity
Run Code Online (Sandbox Code Playgroud)
你不能只为泛型类中的一个方法创建约束,这是没有意义的.
| 归档时间: |
|
| 查看次数: |
12637 次 |
| 最近记录: |