Compilation.GetTypeByMetadataName(String) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取编译程序集中的类型以及所有引用的程序集 (,这些程序集只能通过外部别名) 使用其规范 CLR 元数据名称引用这些程序集。 此查找遵循以下顺序:
- 如果在编译的程序集中找到类型,则返回该类型。
-
接下来,核心库 (定义
System.Object
且未搜索程序集引用的库) 。 如果找到该类型,则返回该类型。 - 最后,搜索所有剩余引用的非外部程序集。 如果找到与提供的元数据名称匹配的一个且只有一种类型,则返回该单一类型。 此检查忽略辅助功能。
public:
Microsoft::CodeAnalysis::INamedTypeSymbol ^ GetTypeByMetadataName(System::String ^ fullyQualifiedMetadataName);
public Microsoft.CodeAnalysis.INamedTypeSymbol GetTypeByMetadataName (string fullyQualifiedMetadataName);
public Microsoft.CodeAnalysis.INamedTypeSymbol? GetTypeByMetadataName (string fullyQualifiedMetadataName);
member this.GetTypeByMetadataName : string -> Microsoft.CodeAnalysis.INamedTypeSymbol
Public Function GetTypeByMetadataName (fullyQualifiedMetadataName As String) As INamedTypeSymbol
参数
- fullyQualifiedMetadataName
- String
返回
如果找不到类型或在查找过程中存在歧义,则为 Null。
注解
由于 VB 没有外部别名的概念,因此它会考虑所有引用的程序集。
在 C# 中,如果核心库被引用为外部程序集,则会搜索它。 不会搜索所有其他外部别名程序集。
由于在搜索与提供的元数据名称匹配的类型时忽略当前程序集的可访问性,因此,如果用户从 BCL 或其他) 源复制已知类型时, (多个引用的程序集定义相同的类型符号,则此 API 将返回 null,即使这些符号中除其中一个符号之外的所有符号都将无法访问当前程序集中的用户写入代码。 若要精细控制不明确性解析,请考虑改用 GetTypesByMetadataName(String) 并筛选所需符号的结果。
程序集可以包含多个模块。 在每个程序集中,将根据模块在该程序集的模块列表中的位置执行搜索。 在程序集的一个模块中找到匹配项时,不会搜索该程序集中的其他模块。
类型转发器将被忽略,不会被视为写入 TypeForwardAttribute 的程序集的一部分。
在每个嵌套级别上检测到歧义性。 例如,如果 A+B
请求,并且有多个 A
s,但其中只有一个 B
具有嵌套类型,则查找将被视为不明确且返回 null。