本文整理汇总了C#中NodeList.Clear方法的典型用法代码示例。如果您正苦于以下问题:C# NodeList.Clear方法的具体用法?C# NodeList.Clear怎么用?C# NodeList.Clear使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NodeList
的用法示例。
在下文中一共展示了NodeList.Clear方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: StartStep
public override PropertyTreeMetaObject StartStep(
PropertyTreeMetaObject target,
PropertyTreeNavigator self,
NodeList children)
{
if (!(target is UntypedToTypedMetaObject))
return target;
if (!children.Any())
return target;
try {
// TODO Only supports one child (lame spec)
var rootType = target.Root.ComponentType;
var types = children.Select(t => ConvertToType(t, rootType)).ToArray();
target = target.BindGenericParameters(types);
} catch (Exception ex) {
if (ex.IsCriticalException())
throw;
Parent.errors.CouldNotBindGenericParameters(target.ComponentType, ex, self.FileLocation);
}
Parent.Bind(target, children.First(), null);
children.Clear();
return target;
}
示例2: ExtractParameterDictionary
public Dictionary<string, PropertyTreeMetaObject> ExtractParameterDictionary(
OperatorDefinition op,
PropertyTreeMetaObject target,
IServiceProvider serviceProvider,
NodeList children)
{
// Named constructor arguments
var duplicates = new HashSet<QualifiedName>();
var mapped = new Dictionary<QualifiedName, PropertyTreeNavigator>();
foreach (var child in children) {
// Implicitly map default NS to real
var impliedName = ImpliedName(child, target);
if (duplicates.Contains(impliedName)) {
// Duplicates can't bind to parameters (only to param arrays)
} else if (mapped.ContainsKey(impliedName)) {
// Detected a duplicate
duplicates.Add(impliedName);
mapped.Remove(impliedName);
} else {
mapped.Add(impliedName, child);
}
}
var args = new Dictionary<string, PropertyTreeMetaObject>(op.Parameters.Count);
PropertyDefinition myParam = null;
List<string> requiredMissing = new List<string>();
foreach (PropertyDefinition p in op.Parameters) {
// Fallback to empty ns
PropertyTreeNavigator nav;
QualifiedName impliedName = p.QualifiedName;
if (p.QualifiedName.Namespace.IsDefault) {
impliedName = impliedName.ChangeNamespace(op.Namespace);
}
if (mapped.TryGetValue(impliedName, out nav)) {
// Binds a parameter required for activating an instance
// TODO Should we supply/use attributes from the parameter
// and/or corresponding property descriptor?
var childContext = target.CreateChild(p.PropertyType);
args[p.Name] = Bind(childContext, nav, serviceProvider);
children.Remove(nav);
}
else if (p.IsOptional) {
PropertyTreeMetaObject defaultValue;
if (p.DefaultValue == null)
defaultValue = PropertyTreeMetaObject.Create(p.PropertyType);
else
defaultValue = PropertyTreeMetaObject.Create(p.DefaultValue);
args[p.Name] = defaultValue;
} else if (p.IsParamArray)
myParam = p;
else if (TypeHelper.IsParameterRequired(p.PropertyType)) {
requiredMissing.Add(Utility.DisplayName(p.QualifiedName));
}
}
if (requiredMissing.Count > 0)
errors.RequiredPropertiesMissing(requiredMissing, op, FindFileLocation(serviceProvider));
if (myParam == null && target.GetDefinition().DefaultProperty == null && duplicates.Any(t => target.SelectProperty(t) != null))
errors.DuplicatePropertyName(duplicates, FindFileLocation(serviceProvider));
// Try param array
if (myParam != null) {
var all = new List<object>();
var elementType = myParam.PropertyType.GetElementType();
foreach (var kvp in children) {
// Bind child nodes so tha latebound applies
var childrenList = NodeList.Create(PropertyTreeBinderImpl.SelectChildren(kvp));
var inline = BindChildNodes(PropertyTreeMetaObject.Create(elementType), kvp, childrenList);
var inlineVal = inline.Component;
all.Add(inlineVal);
}
children.Clear();
var array = Array.CreateInstance(elementType, all.Count);
((System.Collections.ICollection) all).CopyTo(array, 0);
args[myParam.Name] = PropertyTreeMetaObject.Create(array);
}
return args;
}