/// <summary> /// Tries to return a value of <see cref="WorkflowBase.Vars" /> property strong typed. /// </summary> /// <typeparam name="T">Target type.</typeparam> /// <param name="name">The name of the var.</param> /// <param name="value">The field where to write the found value to.</param> /// <param name="defaultValueProvider"> /// The logic that produces the default value for <paramref name="name" /> /// if <paramref name="value" /> does not exist. /// </param> /// <returns>Var exists or not.</returns> /// <exception cref="ArgumentNullException"> /// <paramref name="defaultValueProvider" /> is <see langword="null" />. /// </exception> public bool TryGetVar <T>(IEnumerable <char> name, out T value, Func <string, T> defaultValueProvider) { if (defaultValueProvider == null) { throw new ArgumentNullException("defaultValueProvider"); } lock (this.SyncRoot) { IDictionary <string, object> dict = this.Vars; if (dict != null) { object foundValue; if (dict.TryGetValue(SimpleWorkflowExecutionContext.ParseVarName(name), out foundValue)) { value = GlobalConverter.Current .ChangeType <T>(foundValue); return(true); } } } value = defaultValueProvider(StringHelper.AsString(name)); return(false); }
/// <summary> /// Gets or sets a value of the variables of that workflow. /// </summary> /// <param name="name">The name of the var.</param> /// <returns>The value of the var.</returns> /// <remarks> /// The variable names are NOT case sensitive. /// </remarks> public object this[IEnumerable <char> name] { get { return(this.Vars[SimpleWorkflowExecutionContext.ParseVarName(name)]); } set { this.Vars[SimpleWorkflowExecutionContext.ParseVarName(name)] = value; } }