为什么 CSharpExtensions.ClassifyConversion return 是对象/字符串的显式引用转换?

Why does CSharpExtensions.ClassifyConversion return an explicit reference conversion for object / string?

CSharpExtensions.ClassifyConversion(Compilation, ITypeSymbol, ITypeSymbol) 方法 return 如果使用特殊类型对象作为 source 并且特殊类型字符串作为 destination 参数调用,则为显式引用转换:

var objectTypeSymbol = context.Compilation.GetSpecialType(SpecialType.System_Object);
var stringTypeSymbol = context.Compilation.GetSpecialType(SpecialType.System_String);
var conversion = context.Compilation.ClassifyConversion(objectTypeSymbol, stringTypeSymbol);

据我所知,C# 没有指定内置对象到字符串的转换:C# language reference。为什么它 return 是显式引用转换,它意味着什么?这种转换的 C# 语法会是什么样子?如果调用 ClassifyConversion 时使用空用户将 class 定义为 source 参数并将字符串特殊类型定义为 destination 参数,则 NoConversion 为 returned不出所料。

您看到的只是 bog-standard 对象到字符串的转换,IE:

public string M(object o)
    => (string)o;

IE:在运行时,检查 o 是否是 string 的实例。如果是,则 return 为 string。如果不是,则抛出 InvalidCastException.

具体来说,您从 §10.3.5 显式引用转换中看到了这种情况:

  • From object and dynamic to any other reference_type.

您看不到 user-defined class 的转换,因为它比 object 更具体(因此众所周知,永远不会有到 [=12 的参考转换=].)