本文整理匯總了C#中Mono.CSharp.NamespaceContainer.LookupExtensionMethodCandidates方法的典型用法代碼示例。如果您正苦於以下問題:C# NamespaceContainer.LookupExtensionMethodCandidates方法的具體用法?C# NamespaceContainer.LookupExtensionMethodCandidates怎麽用?C# NamespaceContainer.LookupExtensionMethodCandidates使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類Mono.CSharp.NamespaceContainer
的用法示例。
在下文中一共展示了NamespaceContainer.LookupExtensionMethodCandidates方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。
示例1: LookupExtensionMethod
public ExtensionMethodCandidates LookupExtensionMethod (IMemberContext invocationContext, TypeSpec extensionType, string name, int arity, NamespaceContainer container, int position)
{
//
// Here we try to resume the search for extension method at the point
// where the last bunch of candidates was found. It's more tricky than
// it seems as we have to check both namespace containers and namespace
// in correct order.
//
// Consider:
//
// namespace A {
// using N1;
// namespace B.C.D {
// <our first search found candidates in A.B.C.D
// }
// }
//
// In the example above namespace A.B.C.D, A.B.C and A.B have to be
// checked before we hit A.N1 using
//
ExtensionMethodCandidates candidates;
for (; container != null; container = container.Parent) {
candidates = container.LookupExtensionMethodCandidates (invocationContext, extensionType, name, arity, ref position);
if (candidates != null || container.MemberName == null)
return candidates;
var container_ns = container.ns.Parent;
var mn = container.MemberName.Left;
int already_checked = position - 2;
while (already_checked-- > 0) {
mn = mn.Left;
container_ns = container_ns.Parent;
}
while (mn != null) {
++position;
var methods = container_ns.LookupExtensionMethod (invocationContext, extensionType, name, arity);
if (methods != null) {
return new ExtensionMethodCandidates (invocationContext, methods, container, position);
}
mn = mn.Left;
container_ns = container_ns.Parent;
}
position = 0;
}
return null;
}