public object ConvertFrom(string regexMatch) { var matches = System.Text.RegularExpressions.Regex.Matches(regexMatch, parser.Regex); var arr = System.Array.CreateInstance(parser.Type, matches.Count); for (int i = 0; i < matches.Count; i++) { arr.SetValue(parser.ConvertFrom(matches[i].Value), i); } return(arr); }
public static VC_ParserResult_Func Paser(VC_PaserResult_Cmd result, ParameterInfo[] paramterInfos) { string cmd = result.parameters; List <string> errors = new List <string>(); List <object> convertedParameters = new List <object>(); foreach (ParameterInfo paramInfo in paramterInfos) { VType vType = VTypeCollection.Get(paramInfo.ParameterType); if (vType == null) { errors.Add(string.Format("No converter found for type: {0}", paramInfo.ParameterType.FullName)); break; } cmd = cmd.Trim(); Match ma = Regex.Match(cmd, string.Format("^{0}", vType.Regex)); if (String.IsNullOrWhiteSpace(ma.Value)) { if (paramInfo.IsOptional) { convertedParameters.Add(paramInfo.DefaultValue); continue; } errors.Add("Invalid parameters"); break; } else { try { convertedParameters.Add(vType.ConvertFrom(ma.Value)); } catch (Exception ex) { errors.Add(string.Format("Failed to convert '{0}' to type {1}.{2}{3}", ma.Value, paramInfo.ParameterType.Name, Environment.NewLine, ex.Message)); break; } // cmd = cmd.Substring(ma.Length); } } if (cmd.TrimEnd().Length > 0 && errors.Count == 0) { errors.Add("Provided parameters do not match with the expected parameters."); } return(new VC_ParserResult_Func(convertedParameters.ToArray(), errors.ToArray())); }
public object ConvertFrom(string regexMatch) { var matches = System.Text.RegularExpressions.Regex.Matches(regexMatch, parser.Regex); object list = System.Activator.CreateInstance(Type); for (int i = 0; i < matches.Count; i++) { list.GetType().InvokeMember("Add", BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public, null, list, new object[] { parser.ConvertFrom(matches[i].Value) }); } return(list); }