与类型推断有关的界限是什么?

Hol*_*ler -1 c# generics

可能重复:
谁实际上最后决定什么是通用类型?

正如我的问题标题所说,任何人都可以向我解释什么是界限(上界,下界,精确界限)以及他们如何在类型推理中扮演角色?

考虑简单的代码:

void func<T> ( T firstparam , T secondparam) { }
Run Code Online (Sandbox Code Playgroud)

和来电者打电话

func( 23 , 23.23 ); 
Run Code Online (Sandbox Code Playgroud)

类型推断过程发生了什么以及推理过程如何使用它们的界限是什么?如果我提供的示例是微不足道的并且没有任何上限等,请包含您自己的示例,它将代表该想法.

Ily*_*nov 5

在您的示例中,类型推断没有界限.如果你这样称呼它

 func( 23 , 23.23 ); 
Run Code Online (Sandbox Code Playgroud)

那么类型的候选人将是intdouble.Int可以隐式地进行double但不反过来,所以固定类型Tdouble.这与边界无关,但与类型兼容.

但是,如果你称之为

func( new object() , 23.23 );
Run Code Online (Sandbox Code Playgroud)

然后上限T将是object,下限将是double.在这种情况下固定类型T将是object.

Eric Lippert描述了边界是什么以及为什么它们在blogpost上分离下限,上限和精确边界我们如何确保方法类型推断终止?

Jon Skeet 在其精彩的C#深度书中详细描述了9.4.3两阶段类型推理的类型推断过程.请仔细阅读他对9.11列表类型推断的描述