为什么 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 的参考转换=].)
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 的参考转换=].)