public static object FromString(string str, Type itemType) { try { itemType = (Nullable.GetUnderlyingType(itemType) ?? itemType); if (itemType.IsEnum) { try { object obj = BackCompatibility.BackCompatibleEnum(itemType, str); if (obj != null) { return(obj); } return(Enum.Parse(itemType, str)); } catch (ArgumentException innerException) { throw new ArgumentException("'" + str + "' is not a valid value for " + itemType + ". Valid values are: \n" + GenText.StringFromEnumerable(Enum.GetValues(itemType)), innerException); } } if (parsers.TryGetValue(itemType, out Func <string, object> value)) { return(value(str)); } if (!typeof(ISlateRef).IsAssignableFrom(itemType)) { throw new ArgumentException("Trying to parse to unknown data type " + itemType.Name + ". Content is '" + str + "'."); } ISlateRef obj2 = (ISlateRef)Activator.CreateInstance(itemType); obj2.SlateRef = str; return(obj2); } catch (Exception innerException2) { throw new ArgumentException("Exception parsing " + itemType + " from \"" + str + "\"", innerException2); } }
public void Set <T>(string name, T var, bool isAbsoluteName = false) { if (name.NullOrEmpty()) { Log.Error("Tried to set a variable with null name. var=" + var.ToStringSafe()); return; } if (!isAbsoluteName && !prefix.NullOrEmpty()) { name = prefix + "/" + name; } name = QuestGenUtility.NormalizeVarPath(name); ISlateRef slateRef = var as ISlateRef; if (slateRef != null) { slateRef.TryGetConvertedValue(this, out object value); vars[name] = value; } else { vars[name] = var; } }