本文整理汇总了C#中Handle.ToTypeReferenceHandle方法的典型用法代码示例。如果您正苦于以下问题:C# Handle.ToTypeReferenceHandle方法的具体用法?C# Handle.ToTypeReferenceHandle怎么用?C# Handle.ToTypeReferenceHandle使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Handle
的用法示例。
在下文中一共展示了Handle.ToTypeReferenceHandle方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TryResolve
internal static RuntimeType TryResolve(this ReflectionDomain reflectionDomain, MetadataReader reader, Handle typeDefRefOrSpec, TypeContext typeContext, ref Exception exception)
{
HandleType handleType = typeDefRefOrSpec.HandleType;
if (handleType == HandleType.TypeDefinition)
return reflectionDomain.ResolveTypeDefinition(reader, typeDefRefOrSpec.ToTypeDefinitionHandle(reader));
else if (handleType == HandleType.TypeReference)
return reflectionDomain.TryResolveTypeReference(reader, typeDefRefOrSpec.ToTypeReferenceHandle(reader), ref exception);
else if (handleType == HandleType.TypeSpecification)
return reflectionDomain.TryResolveTypeSignature(reader, typeDefRefOrSpec.ToTypeSpecificationHandle(reader), typeContext, ref exception);
else
throw new BadImageFormatException(); // Expected TypeRef, Def or Spec.
}
示例2: CompareTypeSigWithType
//.........这里部分代码省略.........
if (!CompareTypeSigWithType(ref parser, sig.ElementType))
return false;
uint boundCount1 = parser.GetUnsigned();
for (uint i = 0; i < boundCount1; i++)
{
parser.GetUnsigned();
}
uint lowerBoundCount1 = parser.GetUnsigned();
for (uint i = 0; i < lowerBoundCount1; i++)
{
parser.GetUnsigned();
}
break;
}
case TypeSignatureKind.FunctionPointer:
{
// callingConvention is in data
uint argCount1 = parser.GetUnsigned();
for (uint i = 0; i < argCount1; i++)
{
if (!CompareTypeSigWithType(ref parser, typeHandle))
return false;
}
return false;
}
case TypeSignatureKind.Instantiation:
{
if (typeHandle.HandleType != HandleType.TypeInstantiationSignature)
{
return false;
}
TypeInstantiationSignature sig = typeHandle
.ToTypeInstantiationSignatureHandle(_metadataReader)
.GetTypeInstantiationSignature(_metadataReader);
if (!CompareTypeSigWithType(ref parser, sig.GenericType))
{
return false;
}
uint genericArgIndex = 0;
foreach (Handle genericArgumentTypeHandle in sig.GenericTypeArguments)
{
if (genericArgIndex >= data)
{
// The metadata generic has more parameters than the native layour
return false;
}
if (!CompareTypeSigWithType(ref parser, genericArgumentTypeHandle))
{
return false;
}
genericArgIndex++;
}
// Make sure all generic parameters have been matched
return genericArgIndex == data;
}
case TypeSignatureKind.External:
{
RuntimeTypeHandle type2;
switch (typeHandle.HandleType)
{
case HandleType.TypeDefinition:
if (!TypeLoaderEnvironment.Instance.TryGetOrCreateNamedTypeForMetadata(
_metadataReader, typeHandle.ToTypeDefinitionHandle(_metadataReader), out type2))
{
return false;
}
break;
case HandleType.TypeReference:
if (!TypeLoaderEnvironment.TryGetNamedTypeForTypeReference(
_metadataReader, typeHandle.ToTypeReferenceHandle(_metadataReader), out type2))
{
return false;
}
break;
default:
return false;
}
RuntimeTypeHandle type1 = SigParsing.GetTypeFromNativeLayoutSignature(ref parser, startOffset);
return type1.Equals(type2);
}
default:
return false;
}
return true;
}