【发布时间】:2012-10-23 14:26:06
【问题描述】:
好吧,我不小心撞到了这个……鉴于这种情况:
class Program {
static void Main( string[ ] args ) {
var obj = new gen<int>( );
Console.Write( obj[ 1 ] );
Console.ReadKey( );
}
}
class gen<T> {
public int this[ T i ] { get { return 2; } }
public int this[ int i ] { get { return 1; } }
}
它总是会打印 1。我希望编译器会抱怨,或者运行时会崩溃并烧毁 CPU,但是不,很高兴打印 '1'
当然,如果我对泛型参数使用任何其他类型,我可以选择返回。对于傻笑,我尝试使用 UInt 作为泛型类型参数,我可以区分调用,所以问题是:
为什么 C# 不会崩溃? Anders Hejlsberg 不应该感到原力受到干扰吗?
如何限制某些类型的泛型参数?因为在这个 T 可以是除整数以外的任何东西(但 long 是可以的)
【问题讨论】:
-
在 SO(例如 here )上询问并回答了像
where T : anything-but-int这样的约束(简短回答:你不能) -
我进行了快速搜索,但都没有弹出...但感谢您的指点
标签: c#