本文整理汇总了C#中IMethodSymbol.Construct方法的典型用法代码示例。如果您正苦于以下问题:C# IMethodSymbol.Construct方法的具体用法?C# IMethodSymbol.Construct怎么用?C# IMethodSymbol.Construct使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IMethodSymbol
的用法示例。
在下文中一共展示了IMethodSymbol.Construct方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Instantiate
private IMethodSymbol Instantiate(IMethodSymbol method, IList<ITypeSymbol> invocationTypes)
{
// No need to instantiate if this isn't a generic method.
if (method.TypeArguments.Length == 0)
{
return method;
}
// Can't infer the type parameters if this method doesn't have a return type.
// Note: this is because this code path is specifically flowing type information
// backward through the return type. Type information is already flowed forward
// through arguments by the compiler when we get the initial set of methods.
if (method.ReturnsVoid)
{
return method;
}
// If the method has already been constructed poorly (i.e. with error types for type
// arguments), then unconstruct it.
if (method.TypeArguments.All(t => t.Kind == SymbolKind.ErrorType))
{
method = method.ConstructedFrom;
}
IDictionary<ITypeParameterSymbol, ITypeSymbol> bestMap = null;
foreach (var type in invocationTypes)
{
// Ok. We inferred a type for this location, and we have the return type of this
// method. See if we can then assign any values for type parameters.
var map = DetermineTypeParameterMapping(type, method.ReturnType);
if (map.Count > 0 && (bestMap == null || map.Count > bestMap.Count))
{
bestMap = map;
}
}
if (bestMap == null)
{
return method;
}
var typeArguments = method.ConstructedFrom.TypeParameters.Select(tp => bestMap.GetValueOrDefault(tp) ?? tp).ToArray();
return method.Construct(typeArguments);
}