本文整理汇总了C#中Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol.ConstructIfGeneric方法的典型用法代码示例。如果您正苦于以下问题:C# NamedTypeSymbol.ConstructIfGeneric方法的具体用法?C# NamedTypeSymbol.ConstructIfGeneric怎么用?C# NamedTypeSymbol.ConstructIfGeneric使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol
的用法示例。
在下文中一共展示了NamedTypeSymbol.ConstructIfGeneric方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TransformNamedType
private NamedTypeSymbol TransformNamedType(NamedTypeSymbol namedType, bool isContaining = false)
{
// Native compiler encodes a bool for the given namedType, but none for its containing types.
if (!isContaining)
{
var flag = ConsumeFlag();
Debug.Assert(!flag);
}
NamedTypeSymbol containingType = namedType.ContainingType;
NamedTypeSymbol newContainingType;
if ((object)containingType != null && containingType.IsGenericType)
{
newContainingType = TransformNamedType(namedType.ContainingType, isContaining: true);
if ((object)newContainingType == null)
{
return null;
}
Debug.Assert(newContainingType.IsGenericType);
}
else
{
newContainingType = containingType;
}
// Native compiler encodes bools for each type argument, starting from type arguments for the outermost containing type to those for the given namedType.
ImmutableArray<TypeSymbol> typeArguments = namedType.TypeArgumentsNoUseSiteDiagnostics;
ImmutableArray<TypeSymbol> transformedTypeArguments = TransformTypeArguments(typeArguments);
if (transformedTypeArguments.IsDefault)
{
return null;
}
// Construct a new namedType, if required.
if (newContainingType != containingType)
{
namedType = namedType.OriginalDefinition.AsMember(newContainingType);
return namedType.ConstructIfGeneric(transformedTypeArguments);
}
else if (transformedTypeArguments != typeArguments)
{
return namedType.ConstructedFrom.Construct(transformedTypeArguments);
}
else
{
return namedType;
}
}
示例2: TransformNamedType
private NamedTypeSymbol TransformNamedType(NamedTypeSymbol namedType, bool isContaining = false)
{
// Native compiler encodes a bool for the given namedType, but none for its containing types.
if (!isContaining)
{
var flag = ConsumeFlag();
Debug.Assert(!flag);
}
NamedTypeSymbol containingType = namedType.ContainingType;
NamedTypeSymbol newContainingType;
if ((object)containingType != null && containingType.IsGenericType)
{
newContainingType = TransformNamedType(namedType.ContainingType, isContaining: true);
if ((object)newContainingType == null)
{
return null;
}
Debug.Assert(newContainingType.IsGenericType);
}
else
{
newContainingType = containingType;
}
// Native compiler encodes bools for each type argument, starting from type arguments for the outermost containing type to those for the given namedType.
ImmutableArray<TypeSymbol> typeArguments = namedType.TypeArgumentsNoUseSiteDiagnostics;
var customModifiers = namedType.HasTypeArgumentsCustomModifiers ? namedType.TypeArgumentsCustomModifiers : default(ImmutableArray<ImmutableArray<CustomModifier>>);
ImmutableArray<TypeSymbol> transformedTypeArguments = TransformTypeArguments(typeArguments); // Note, modifiers are not involved, this is behavior of the native compiler.
if (transformedTypeArguments.IsDefault)
{
return null;
}
// Construct a new namedType, if required.
bool containerIsChanged = (newContainingType != containingType);
if (containerIsChanged || transformedTypeArguments != typeArguments)
{
var newTypeArguments = customModifiers.IsDefault ?
transformedTypeArguments.SelectAsArray(TypeMap.TypeSymbolAsTypeWithModifiers) :
transformedTypeArguments.Zip(customModifiers, (t, m) => new TypeWithModifiers(t, m)).AsImmutable();
if (containerIsChanged)
{
namedType = namedType.OriginalDefinition.AsMember(newContainingType);
return namedType.ConstructIfGeneric(newTypeArguments);
}
return namedType.ConstructedFrom.Construct(newTypeArguments, unbound: false);
}
else
{
return namedType;
}
}