本文整理汇总了C#中IGenericParameter.GetBaseTypeConstraints方法的典型用法代码示例。如果您正苦于以下问题:C# IGenericParameter.GetBaseTypeConstraints方法的具体用法?C# IGenericParameter.GetBaseTypeConstraints怎么用?C# IGenericParameter.GetBaseTypeConstraints使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IGenericParameter
的用法示例。
在下文中一共展示了IGenericParameter.GetBaseTypeConstraints方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ViolatesParameterConstraints
/// <summary>
/// Checks if a specified type argument violates the constraints
/// declared on a specified type paramter.
/// </summary>
public bool ViolatesParameterConstraints(IGenericParameter parameter, TypeReference argumentNode)
{
IType argument = TypeSystemServices.GetEntity(argumentNode) as IType;
// Ensure argument is a valid type
if (argument == null || TypeSystemServices.IsError(argument))
{
return false;
}
bool valid = true;
// Check type semantics constraints
if (parameter.IsClass && !argument.IsClass)
{
Errors.Add(CompilerErrorFactory.GenericArgumentMustBeReferenceType(ConstructionNode, parameter, argument));
valid = false;
}
if (parameter.IsValueType && !argument.IsValueType)
{
Errors.Add(CompilerErrorFactory.GenericArgumentMustBeValueType(argumentNode, parameter, argument));
valid = false;
}
if (parameter.MustHaveDefaultConstructor && !HasDefaultConstructor(argument))
{
Errors.Add(CompilerErrorFactory.GenericArgumentMustHaveDefaultConstructor(argumentNode, parameter, argument));
valid = false;
}
// Check base type constraints
IType[] baseTypes = parameter.GetBaseTypeConstraints();
if (baseTypes != null)
{
foreach (IType baseType in baseTypes)
{
// Don't check for System.ValueType supertype constraint
// if parameter also has explicit value type constraint
if (baseType == _tss.ValueTypeType && parameter.IsValueType)
continue;
if (!baseType.IsAssignableFrom(argument))
{
Errors.Add(CompilerErrorFactory.GenericArgumentMustHaveBaseType(argumentNode, parameter, argument, baseType));
valid = false;
}
}
}
return !valid;
}