本文整理汇总了C#中System.Compiler.Module.GetStructurallyEquivalentType方法的典型用法代码示例。如果您正苦于以下问题:C# Module.GetStructurallyEquivalentType方法的具体用法?C# Module.GetStructurallyEquivalentType怎么用?C# Module.GetStructurallyEquivalentType使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Compiler.Module
的用法示例。
在下文中一共展示了Module.GetStructurallyEquivalentType方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TryToFindExistingInstance
protected virtual void TryToFindExistingInstance(Module/*!*/ module, TypeNode declaringType, TypeNodeList/*!*/ templateArguments, Identifier/*!*/ mangledName,
Identifier/*!*/ uniqueMangledName, out TypeNode result, out Identifier unusedMangledName)
{
unusedMangledName = null;
string mangledNameString = mangledName.Name;
int n = templateArguments.Count;
int tiCount = 0;
bool lookInReferencedAssemblies = TargetPlatform.GenericTypeNamesMangleChar != '`'; //REVIEW: huh? why not use IsGeneric?
result = module.GetStructurallyEquivalentType(this.Namespace == null ? Identifier.Empty : this.Namespace, mangledName, uniqueMangledName, lookInReferencedAssemblies);
if(this.IsGeneric)
{
if(result == null)
unusedMangledName = mangledName;
return;
}
while(result != null)
{
//Mangled name is the same. But mangling is not unique (types are not qualified with assemblies), so check for equality.
if(this == result.Template && (declaringType == result.DeclaringType || !this.IsGeneric))
{
bool goodMatch = (result.TemplateArguments != null || n == 0) && result.TemplateArguments.Count == n;
for(int i = 0; goodMatch && i < n; i++)
goodMatch = templateArguments[i] == result.TemplateArguments[i];
if(goodMatch)
return;
}
//Mangle some more
mangledName = new Identifier(mangledNameString + (++tiCount).ToString());
result = module.GetStructurallyEquivalentType(this.Namespace == null ? Identifier.Empty : this.Namespace, mangledName, null, lookInReferencedAssemblies);
}
if(result == null)
unusedMangledName = mangledName;
}