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


C# Engine.Throw方法代码示例

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


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

示例1: GetField

 public static object GetField(Engine engine, object context, string fieldName)
 {
     if (context == null) engine.Throw("context cannot be null for field: " + fieldName);
     var fieldInfo = context.GetType().GetField(fieldName);
     if (fieldInfo != null) return fieldInfo.GetValue(context);
     return engine.Throw("no such field: " + fieldName);
 }
开发者ID:ricksladkey,项目名称:Markup-Programming,代码行数:7,代码来源:PathHelper.cs

示例2: CallMethod

 public static object CallMethod(string methodName, bool staticMethod, Type typeToCall, object callee, IEnumerable<object> args, Type[] typeArgs, Engine engine)
 {
     var bindingFlags = (staticMethod ? BindingFlags.Static : BindingFlags.Instance) |
         BindingFlags.Public | BindingFlags.FlattenHierarchy;
     var methodInfo = null as MethodInfo;
     if (typeArgs != null)
     {
         // Use type arguments to choose overload.
         methodInfo = typeToCall.GetMethod(methodName, bindingFlags, null, typeArgs, null);
     }
     else
     {
         // Look for a matching method.
         var candidates = typeToCall.GetMethods(bindingFlags).Where(info => info.Name == methodName);
         var count = candidates.Count();
         if (count >= 1)
         {
             if (count == 1)
                 methodInfo = candidates.First();
             else
             {
                 // Use arguments to choose overload.
                 var types = args.Select(value => value != null ? value.GetType() : typeof(object));
                 methodInfo = typeToCall.GetMethod(methodName, bindingFlags, null, types.ToArray(), null);
                 if (methodInfo == null) engine.Throw("method overload not found: " + methodName);
             }
         }
     }
     if (methodInfo == null) engine.Throw("method not found: " + methodName);
     var parameters = methodInfo.GetParameters();
     var methodArgs = null as object[];
     if (HasParamsParameter(parameters))
     {
         var m = parameters.Length - 1;
         var initiaArgs = ConvertArguments(parameters.Take(m), args.Take(m));
         var paramsType = parameters[m].ParameterType.GetElementType();
         var remainingArgs = TypeHelper.CreateArray(args.Skip(m).ToArray(), paramsType);
         methodArgs = initiaArgs.Concat(new object[] { remainingArgs }).ToArray();
     }
     else
     {
         if (parameters.Length != args.Count()) engine.Throw("argument count mismatch: {0} != {1}", parameters.Length, args.Count());
         methodArgs = ConvertArguments(parameters, args).ToArray();
     }
     bool trace = engine.ShouldTrace(TraceFlags.Call);
     if (trace)
     {
         TraceCall("args", methodName, args, engine);
         TraceCall("methodArgs", methodName, methodArgs, engine);
     }
     var result = methodInfo.Invoke(callee, methodArgs);
     if (trace) engine.Trace(TraceFlags.Call, "Call {0} = {1}", methodName, result);
     return result;
 }
开发者ID:ricksladkey,项目名称:Markup-Programming,代码行数:54,代码来源:CallHelper.cs

示例3: GetEnumValue

 public static object GetEnumValue(Engine engine, Type type, string enumName)
 {
     if (!type.IsEnum) engine.Throw("not an enum: " + type.FullName);
     try
     {
         return Enum.Parse(type, enumName, false);
     }
     catch
     {
     }
     return engine.Throw("enum value not found: " + enumName);
 }
开发者ID:ricksladkey,项目名称:Markup-Programming,代码行数:12,代码来源:PathHelper.cs

示例4: OnExecute

 protected override void OnExecute(Engine engine)
 {
     if (engine.HasBindingOrValue(ValueProperty, Path))
     {
         if ((bool)engine.Get(ValueProperty, Path, CodeTree, typeof(bool))) Body.Execute(engine);
         return;
     }
     if (Body.Count == 0) engine.Throw("missing condition");
     var expression = Body[0] as IExpression;
     if (expression == null) engine.Throw("missing expression");
     if (!TypeHelper.ConvertToBool(expression.Get(engine))) return;
     Body.ExecuteSkipOne(engine);
 }
开发者ID:ricksladkey,项目名称:Markup-Programming,代码行数:13,代码来源:When.cs

示例5: GetProperty

        public static object GetProperty(Engine engine, object context, string propertyName)
        {
            if (context == null) engine.Throw("context cannot be null for property: " + propertyName);
            object value = null;
            var propertyInfo = context.GetType().GetProperty(propertyName);
            if (propertyInfo != null)
            {
                value = propertyInfo.GetValue(context, null);
                return value;
            }

            #if !SILVERLIGHT
            if (!Configuration.Silverlight)
                foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(context))
                    if (descriptor.Name == propertyName) return descriptor.GetValue(context);
            #endif

            if (context is System.Dynamic.DynamicObject)
                if ((context as System.Dynamic.DynamicObject).TryGetMember(new BasicGetMemberBinder(propertyName), out value)) return value;

            #if SILVERLIGHT
            if (context is IDynamicObject)
            {
                var dynamicObject = context as IDynamicObject;
                foreach (var property in dynamicObject.DynamicProperties)
                    if (property.Name == propertyName) return dynamicObject[propertyName];
            }
            #endif

            return engine.Throw("no such property: " + propertyName);
        }
开发者ID:ricksladkey,项目名称:Markup-Programming,代码行数:31,代码来源:PathHelper.cs

示例6: ParseParameter

 private Parameter ParseParameter(Engine engine, string parameter)
 {
     if (!parameter.Contains(' ')) return new Parameter { ParameterName = parameter};
     var fields = parameter.Split(' ');
     if (fields.Length != 2 || fields[0] != "params") engine.Throw("invalid params: " + parameter);
     return new Parameter { ParameterName = fields[1], Params = true };
 }
开发者ID:ricksladkey,项目名称:Markup-Programming,代码行数:7,代码来源:Function.cs

示例7: CallAccessor

 public static object CallAccessor(Engine engine, bool isSet, object context, params object[] rawArgs)
 {
     if (context == null) engine.Throw("context cannot be null for item accessor");
     var contextType = context.GetType();
     var propertyInfo = contextType.GetProperty("Item");
     if (propertyInfo == null && context is IList) propertyInfo = typeof(IList).GetProperty("Item");
     if (propertyInfo == null) engine.Throw("no such property");
     var methodInfo = isSet ? propertyInfo.GetSetMethod() : propertyInfo.GetGetMethod();
     if (methodInfo == null) engine.Throw("no such method");
     var parameters = methodInfo.GetParameters();
     if (parameters.Length != rawArgs.Length)
         engine.Throw("indexer count mismatch: {0} != {1}", parameters.Length, rawArgs.Length);
     var args = parameters.Zip(rawArgs,
         (parameter, indexer) => TypeHelper.Convert(indexer, parameter.ParameterType)).ToArray();
     return methodInfo.Invoke(context, args);
 }
开发者ID:ricksladkey,项目名称:Markup-Programming,代码行数:16,代码来源:PathHelper.cs

示例8: OnActiveExecute

 protected override void OnActiveExecute(Engine engine)
 {
     if (Path != null)
     {
         CodeTree.Compile(engine, CodeType.Event, Path);
         var context = CodeTree.GetContext(engine);
         if (context == null) engine.Throw("context cannot be null for event: " + Path);
         RegisterHandler(engine, context, CodeTree.GetEvent(engine));
     }
     else
         RegisterHandler(engine, null, null);
     if (State == null) State = engine.GetClosure();
 }
开发者ID:ricksladkey,项目名称:Markup-Programming,代码行数:13,代码来源:EventHandler.cs

示例9: OnExecute

 protected override void OnExecute(Engine engine)
 {
     if (Prototype != null)
     {
         var func = Prototype;
         var open = func.IndexOf('(');
         var close = func.LastIndexOf(')');
         if (open == -1 || close == -1) engine.Throw("missing parentheses: " + func);
         FunctionName = func.Substring(0, open);
         var fields = func.Substring(open + 1, close - (open + 1)).Split(',');
         Parameters.AddRange(fields.Select(field => ParseParameter(engine, field.Trim())));
     }
     engine.DefineFunction(FunctionName, this);
 }
开发者ID:ricksladkey,项目名称:Markup-Programming,代码行数:14,代码来源:Function.cs

示例10: Call

 public static object Call(string path, CodeTree codeTree, string staticMethodName, string methodName, string functionName, BuiltinFunction builtinFunction, Type type, ExpressionCollection typeArguments, IEnumerable<object> args, Engine engine)
 {
     if (path != null)
         return engine.CallPath(path, codeTree, args);
     if (functionName != null)
         return engine.CallFunction(functionName, args);
     if (builtinFunction != 0)
         return engine.CallBuiltinFunction(builtinFunction, args);
     var typeArgs = typeArguments.Count != 0 ? typeArguments.Get(engine).Cast<Type>().ToArray() : null;
     if (staticMethodName != null)
         return CallHelper.CallMethod(staticMethodName, true, type, null, args, typeArgs, engine);
     if (methodName != null)
         return CallHelper.CallMethod(methodName, false, type ?? engine.Context.GetType(), engine.Context, args, typeArgs, engine);
     return engine.Throw("nothing to call");
 }
开发者ID:ricksladkey,项目名称:Markup-Programming,代码行数:15,代码来源:CallHelper.cs

示例11: OnGet

 protected override object OnGet(Engine engine)
 {
     if (Expression == null) engine.Throw("path expression not specified");
     return engine.GetPath(Expression, CodeTree);
 }
开发者ID:ricksladkey,项目名称:Markup-Programming,代码行数:5,代码来源:Path.cs

示例12: EvaluateItems

 private IList EvaluateItems(Engine engine, object value)
 {
     var result = engine.GetExpression(value);
     if (!(result is IList)) engine.Throw("value does not evaluate to a collection");
     return result as IList;
 }
开发者ID:ricksladkey,项目名称:Markup-Programming,代码行数:6,代码来源:ResourceCollection.cs

示例13: RegisterHandler

 protected void RegisterHandler(Engine engine, object alternateContext, string alternateEventName)
 {
     var context = alternateContext ?? AssociatedObject;
     registeredEventName = EventName ?? alternateEventName ?? AttachedKey;
     if (registeredEventName == AttachedKey)
     {
         EventHandler(this, null);
         return;
     }
     var eventInfo = context.GetType().GetEvent(registeredEventName);
     if (eventInfo == null) engine.Throw("no such event: " + registeredEventName);
     eventInfo.AddEventHandler(context,
         Delegate.CreateDelegate(eventInfo.EventHandlerType, this, handlerMethodInfo));
 }
开发者ID:ricksladkey,项目名称:Markup-Programming,代码行数:14,代码来源:Handler.cs

示例14: OnGet

 protected override object OnGet(Engine engine)
 {
     if (Op == default(Op)) engine.Throw("missing operator");
     var type = engine.GetType(TypeProperty, TypePath, TypeCodeTree);
     if (Arguments.Count == 0)
     {
         var arity = Op.GetArity();
         if (arity == 1)
             return engine.Operator(Op, engine.Get(ValueProperty, Path, CodeTree, type));
         var value1 = engine.Get(Value1Property, Path1, CodeTree1, type);
         var value2 = engine.Get(Value2Property, Path2, CodeTree2, type);
         return engine.Operator(Op, value1, value2);
     }
     return engine.Operator(Op, Arguments);
 }
开发者ID:ricksladkey,项目名称:Markup-Programming,代码行数:15,代码来源:Operator.cs

示例15: GetPropertyType

        public static Type GetPropertyType(Engine engine, object context, string propertyName)
        {
            if (context == null) engine.Throw("context cannot be null for property: " + propertyName);
            var propertyInfo = context.GetType().GetProperty(propertyName);
            if (propertyInfo != null) return propertyInfo.PropertyType;

            #if !SILVERLIGHT
            if (!Configuration.Silverlight)
                foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(context))
                    if (descriptor.Name == propertyName) return descriptor.PropertyType;
            #endif

            if (context is System.Dynamic.DynamicObject)
            {
                var value = GetProperty(engine, context, propertyName);
                return value != null ? value.GetType() : typeof(object);
            }

            #if SILVERLIGHT
            if (context is IDynamicObject)
            {
                var dynamicObject = context as IDynamicObject;
                foreach (var property in dynamicObject.DynamicProperties)
                    if (property.Name == propertyName) return property.Type;
            }
            #endif

            return engine.Throw("no such property: " + propertyName) as Type;
        }
开发者ID:ricksladkey,项目名称:Markup-Programming,代码行数:29,代码来源:PathHelper.cs


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