gpt4 book ai didi

c# - 上界/下界推理和修复

转载 作者:可可西里 更新时间:2023-11-01 09:13:03 26 4
gpt4 key购买 nike

在 C# 4.0 规范 7.5.2.9 中:

A lower-bound inference from a type U to a type V is made as follows:

  • 如果 V 是未固定的 Xi 之一,则将 U 添加到 Xi 的下限集合中。
  • [...]

这个部分我已经看了很多遍了。缺少部分引用,这个定义读起来就像一个循环引用。所以,我希望在附近找到语法制作或章节引用来澄清……我没有。本节还与 Fixing 相关,后者也存在类似的定义问题。

什么是上限推断下限推断

最佳答案

我会尽力描述得更清楚。最坏的情况,我以不同的方式描述它。

上限/下限推断是针对用于特定泛型方法调用的类型参数进行类型推断的分阶段方法的一部分。显然,如果在第一阶段显式输入参数 (E),则不会应用上/下推断。例如:

给予

public static T Choose<T>(T first, T second) {
return (rand.Next(2) == 0)? first: second;
}

我可以调用 Choose带有显式类型参数:

Choose<String>("first", "second");

关于上界或下界推理,贯穿 7.5.2 的一些暗示决定下界或上界推理是否适用。例如,7.5.2.9(和 .10)详细说明类型参数未固定,以便进行上限或下限推断。 7.5.2.5 详细说明一个类型参数只有在该类型参数依赖于另一个未固定类型参数时才是不固定的。例如

IEnumerable<TResult> Select<TSource, TResult>(IEnumerable<TSource> e,
Func<TSource, Result> f)

TResult “取决于”TSource ,因为 TSource 的类型可能会确定 TResult 的类型.例如像Select(c, e->Name)这样的电话, TResult取决于 Name 的类型在TSource .

在上界和下界推理方面,对于给定的未固定类型参数 (X),其类型 (V) 未明确声明(请参阅第一段),上界 推导出类型 U 的类型参数 (E)。如果类型参数是协变的(具有 out 修饰符)并且下界集中的一种类型是该参数的候选者,则发生下界推理。相反,如果类型参数是逆变的(具有“in”修饰符)并且上限集合中的一种类型是该参数的候选者,则发生上限推断。例如与 Select(c, e->e.Name)cIEnumerable<Mammal>那么编译器会推断出 Mammal下限因为 IEnumerable 中的类型参数是协变的(例如它被声明为 IEnumerable<out T> 。如果它被声明为 IEnumerable<in T> 则将推断出上限。如果它被声明为 Enumerabale<T> - 没有 inout 那么它将是 < em>不变 并且上界和下界推理都不适用。)

显然,如果参数类型既不能协变也不能逆变,则必须发生精确匹配

关于c# - 上界/下界推理和修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14938337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com