本文整理匯總了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;
}