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


C# ParameterModifier.Clone方法代码示例

本文整理汇总了C#中System.Reflection.ParameterModifier.Clone方法的典型用法代码示例。如果您正苦于以下问题:C# ParameterModifier.Clone方法的具体用法?C# ParameterModifier.Clone怎么用?C# ParameterModifier.Clone使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在System.Reflection.ParameterModifier的用法示例。


在下文中一共展示了ParameterModifier.Clone方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: BindToMethod

			public override MethodBase BindToMethod (BindingFlags bindingAttr, MethodBase[] match, ref object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] names, out object state)
			{
				Type[] types;
				if (args == null)
					types = Type.EmptyTypes;
				else {
					types = new Type [args.Length];
					for (int i = 0; i < args.Length; ++i) {
						if (args [i] != null)
							types [i] = args [i].GetType ();
					}
				}

				MethodBase selected = null;
				if (names != null) {
					foreach (var m in match) {
						var parameters = m.GetParameters ();
						int i;

						/*
						 * Find the corresponding parameter for each parameter name,
						 * reorder types/modifiers array during the search.
						 */
						Type[] newTypes = (Type[])types.Clone ();
						ParameterModifier[] newModifiers = modifiers != null ? (ParameterModifier[])modifiers.Clone () : null;
						for (i = 0; i < names.Length; ++i) {
							/* Find the corresponding parameter */
							int nindex = -1;
							for (int j = 0; j < parameters.Length; ++j) {
								if (parameters [j].Name == names [i]) {
									nindex = j;
									break;
								}
							}
							if (nindex == -1)
								break;
							if (i < newTypes.Length && nindex < types.Length)
								newTypes [i] = types [nindex];
							if (modifiers != null && i < newModifiers.Length && nindex < modifiers.Length)
								newModifiers [i] = modifiers [nindex];
						}
						if (i < names.Length)
							continue;

						selected = SelectMethod (bindingAttr, new MethodBase [] { m }, newTypes, newModifiers, true, args);
						if (selected != null)
							break;
					}
				} else {
					selected = SelectMethod (bindingAttr, match, types, modifiers, true, args);
				}

				state = null;
				if (selected != null && names != null)
					ReorderParameters (names, ref args, selected);

				if (selected != null) {
					if (args == null)
						args = EmptyArray<object>.Value;
	
					AdjustArguments (selected, ref args);
				}

				return selected;
			}
开发者ID:ramonsmits,项目名称:mono,代码行数:65,代码来源:Binder.cs


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