【发布时间】:2010-05-13 08:32:37
【问题描述】:
我有两个场景。
这失败了:
class F<X>
{
public X X { get; set; }
}
错误 CS0102:“F<X>”类型已包含“X”的定义
这行得通:
class F<X>
{
class G
{
public X X { get; set; }
}
}
唯一合乎逻辑的解释是,在第二个 sn-p 中,类型参数 X 超出范围,这是不正确的......
为什么类型参数会影响我在类型中的定义?
IMO,为了保持一致性,要么两者都应该工作,要么都不应该工作。
还有其他想法吗?
PS:我称之为“词汇”,但它可能不是正确的术语。
更新:
根据 Henk 的回答,这是一个显示相同行为的非通用版本,但可能更容易理解。
失败:
class F
{
class X { }
public X X { get; set; }
}
作品:
class X { }
class F
{
public X X { get; set; }
}
据我所知,C# 编译器在类型定义边界处创建了一个词法范围。
这也意味着类型和成员名称位于相同的“位置”(或 LISP 中的 namespace)。
【问题讨论】:
-
我不明白为什么第一个不应该工作,任何人都能够重现编译器错误?
-
根据您的更新,看起来 Marcelo 回答了您的问题 - 他演示了同样的事情。
-
@Kobi:不,不完全是:) 我也没有对他投反对票,因为它是部分适用的。
-
不相关,但你能看看我的问题 leppie 吗? stackoverflow.com/questions/4444708/…
标签: c# generics compiler-construction compiler-errors