Jav*_*aSa 4 c# generics dictionary compiler-errors compilation
我收到有关这段代码的编译错误:
错误1无效的标记'('在类,结构或接口成员声明中'
错误2不能在for,using,fixed或声明中使用多个类型
知道为什么吗?另外,可以如下声明字典吗?
public class S
{
private class ObInfo<T>
{
private string _type;
private T _value;
public ObInfo<T>(string i_Type, T Value)
{
this._type = i_Type;
this._value = Value;
}
public ObInfo()
{}
}
private static Dictionary<int,ObInfo> sObj= new Dictionary<int,ObInfo>();
}
Run Code Online (Sandbox Code Playgroud)
public ObInfo<T>(...) {
Run Code Online (Sandbox Code Playgroud)
构造函数不能采用泛型参数.
删除<T>
,一切都会工作.
类中的所有方法(和类型)都继承该类的泛型参数; 如果方法需要单独的类型参数,则应该只在泛型类中创建泛型方法.(这应该避免;这非常令人困惑)
此外,开放泛型类型实际上不是类型; 你不能Dictionary<int,ObInfo>
没有指定类型参数ObjInfo
.
相反,您可以为字典使用非泛型接口,也可以将type参数移动到外部类,并为每个类型参数设置单独的字典.
SLaks的答案很好,但澄清一点:你问为什么错误发生了,而不是如何解决它.报告错误是因为编译器推断您打算说:
private class ObInfo<T>
{
public ObInfo<T> SomeMethodNameHere(string i_Type, T Value)
Run Code Online (Sandbox Code Playgroud)
也就是说,它认为您正在尝试创建方法 - 或者可能是字段或事件 - 并且您已键入返回类型,ObInfo<T>
但忘记了方法名称.无论这是方法,字段还是事件,(
都是意外的,因此这就是错误.
显然这不是最好的错误信息,因为它让你感到困惑.最好添加另一种启发式方法来特异性地检测您所处的情况.
我有兴趣知道你为什么犯这个错误.你觉得:
?
如果您认为第一件事:T不是类名的一部分.如果你认为第二件事:如果那是真的那么你将在范围内声明一个名为T 的第二个类型参数,这有点令人困惑,不是吗?
归档时间: |
|
查看次数: |
211 次 |
最近记录: |