当前位置: 首页>>代码示例>>C#>>正文


C# NamespaceContainer.LookupExtensionMethodCandidates方法代码示例

本文整理汇总了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;
		}
开发者ID:pcc,项目名称:mono,代码行数:51,代码来源:namespace.cs


注:本文中的Mono.CSharp.NamespaceContainer.LookupExtensionMethodCandidates方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。