Can someone explain how the compiler proceeds here to find the "common" type (double).
I assume the IConvertible plays a role here?

private static void Main(string[] args)
{
    var nrColl = new[] { 1, 2, 0.14, 'a',};
}

推荐答案

请参阅说明书中的Finding the best common type of a set of expressions.

  • 引入了一种新的非固定型变量X.
  • 对于每个表达式Ei,从它到X执行输出类型推断.
  • 如果可能,X是固定的,并且结果类型是最好的公共类型.
  • 否则,推理就会失败.

直观地说,这个推断等同于调用一个方法VOID M(X x₁...X xᵥ),以Eᵢ为自变量,推断X.

如果您遵循如何完成输出类型推断的步骤,您最终会看到,在本例中,类型变量X将具有下限intdoublechar.

然后,到fixX

对于Xᵢ的每个下界U,从候选集合中移除不存在从U到U的隐式转换的所有类型Uₑ.

如果在剩余的候选类型Uₑ中存在从所有其他候选类型隐式转换到的唯一类型V,则Xᵢ固定为V.

我们可以try 手动操作.

让我们先来看看int个.int可以隐式转换为double,因此double不会被删除.无法将int转换为char,因此删除了char.接下来我们来看一下double.double不能隐式转换为int,因此将删除int.我们现在只剩下double,所以X固定为double.

基本上,如果数组初始化器中的表达式类型中恰好有一个类型T,所有其他表达式都可以隐式转换为该类型,则T是数组的类型.

Csharp相关问答推荐

有没有方法让ASP.NET Core模型绑定器使用私有设置器来设置属性?

System.Data.SQLite:判断SQLite数据库是否为空(任何表中至少有一行)

将修剪声明放入LINQ中

C#自定义字典与JSON(de—)serialize

EF Core. Income和. AsNoTracking正确用法

. NET Core DB vs JSON模型设计

Unity 2D自顶向下弓旋转

在C#中使用类中的对象值

如何将Kafka消息时间戳转换为C#中的日期和时间格式?

如何测量在使用UTF8而不是C#中的UTF16编码字符串时内存使用量的增长

SortedSet.Remove()不会删除SortedSet.Min返回的元素

C#-从基类更新子类

使用带有参数和曲面的注入失败(&Q;)

如何让两个.NET版本不兼容的项目对话?

WPF如何获取有关从一个视图模型更改另一个视图模型的信息

如何在JSON:API中定义的&过滤查询参数系列&标准的GET请求中传递多个相关参数?

.NET6最小API:操作.MapGet之后的响应

根据运行时值获取泛型类型的字典

无法停止PowerShell中的低级挂钩(c#挂钩)

能否将我图表中的星号与X轴上一天中的第二位数字对齐?