public AttributeInfo(string name, IValueInfo valueInfo, AttributeValidityEnum attributeValidity, string subTagName = null) { Name = name; ValueInfo = valueInfo ?? new StringValue(); AttributeValidity = attributeValidity; SubTagName = subTagName; }
public static string GetDescription(this IValueInfo valueInfo) { if (valueInfo != null) { return(valueInfo.Description); } return(null); }
public static string GetName(this IValueInfo valueInfo) { if (valueInfo != null) { return(valueInfo.Name); } return(null); }
/// <summary> /// 验证路径对应的目录是否存在。 /// </summary> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="DirectoryNotFoundException"> /// <paramref name="valueInfo"/> 的值对应的目录不存在。</exception> public static IValueInfo <string> IsExistingDirectory( this IValueInfo <string> valueInfo, string?message = null) { if (!Directory.Exists(valueInfo.Value)) { ThrowHelper.ThrowDirectoryNotFoundException(message); } return(valueInfo); }
/// <summary> /// 验证路径对应的文件是否存在。 /// </summary> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="FileNotFoundException"> /// <paramref name="valueInfo"/> 的值对应的文件不存在。</exception> public static IValueInfo <string> IsExistingFile( this IValueInfo <string> valueInfo, string?message = null) { if (!File.Exists(valueInfo.Value)) { ThrowHelper.ThrowFileNotFoundException(valueInfo.Value, message); } return(valueInfo); }
/// <summary> /// 验证集合中是否包含指定元素。 /// </summary> /// <typeparam name="T">待验证的集合中的元素的类型。</typeparam> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="value">集合中应该包含的元素。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"> /// <paramref name="valueInfo"/> 的值不包含 <paramref name="value"/>。</exception> public static IValueInfo <IEnumerable <T> > Contains <T>( this IValueInfo <IEnumerable <T> > valueInfo, T value, string?message = null) { if (!valueInfo.Value.Contains(value)) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message); } return(valueInfo); }
/// <summary> /// 验证字符串是否不包含指定字符串。 /// </summary> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="value">不应包含的字符串。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"> /// <paramref name="valueInfo"/> 的值包含 <paramref name="value"/>。</exception> public static IValueInfo <string> NotContains( this IValueInfo <string> valueInfo, string value, string?message = null) { if (valueInfo.Value.Contains(value)) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message); } return(valueInfo); }
/// <summary> /// 验证对象是否不等于指定值。 /// </summary> /// <typeparam name="T">待验证的对象的类型。</typeparam> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="value">对象不应等于的值。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"> /// <paramref name="valueInfo"/> 的值等于 <paramref name="value"/>。</exception> public static IValueInfo <T> NotEqualsTo <T>( this IValueInfo <T> valueInfo, T value, string?message = null) { if (EqualityComparer <T> .Default.Equals(valueInfo.Value, value)) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message); } return(valueInfo); }
/// <summary> /// 验证对象是否包含在键的集合中。 /// </summary> /// <typeparam name="T">待验证的对象的类型。</typeparam> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="keyCollection">应包含当前对象的键的集合。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="KeyNotFoundException"> /// <paramref name="valueInfo"/> 的值不在 <paramref name="keyCollection"/> 中。</exception> public static IValueInfo <T> IsInKeys <T>( this IValueInfo <T> valueInfo, IEnumerable <T> keyCollection, string?message = null) { if (!keyCollection.Contains(valueInfo.Value)) { ThrowHelper.ThrowKeyNotFoundException(message); } return(valueInfo); }
/// <summary> /// 验证字符串是否不以指定字符串开始。 /// </summary> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="value">不应作为开始的字符串。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"> /// <paramref name="valueInfo"/> 的值以 <paramref name="value"/> 开始。</exception> public static IValueInfo <string> NotStartsWith( this IValueInfo <string> valueInfo, string value, string?message = null) { if (!valueInfo.Value.StartsWith(value)) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message); } return(valueInfo); }
/// <summary> /// 验证对象是否满足条件。 /// </summary> /// <typeparam name="T">待验证的对象的类型。</typeparam> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="predicate">对象应满足的条件。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"> /// <paramref name="predicate"/> 返回 <see langword="false"/>。</exception> public static IValueInfo <T> MatchesCondition <T>( this IValueInfo <T> valueInfo, Predicate <T> predicate, string?message = null) { if (predicate(valueInfo.Value)) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message); } return(valueInfo); }
/// <summary> /// 验证集合中是否存在元素满足指定条件。 /// </summary> /// <typeparam name="T">待验证的集合中的元素的类型。</typeparam> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="predicate">集合中至少一个元素应该满足的条件。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"><paramref name="valueInfo"/> /// 的值不存在满足 <paramref name="predicate"/> 条件的元素。</exception> public static IValueInfo <IEnumerable <T> > AnyMatches <T>( this IValueInfo <IEnumerable <T> > valueInfo, Predicate <T> predicate, string?message = null) { if (!valueInfo.Value.Any(item => predicate(item))) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message); } return(valueInfo); }
/// <summary> /// 验证字符串的长度是否在指定范围内。 /// </summary> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="minLength">字符串允许的最小长度。</param> /// <param name="maxLength">字符串允许的最大长度。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"><paramref name="valueInfo"/> 的长度不在 /// <paramref name="minLength"/> 和 <paramref name="maxLength"/> 之间。</exception> public static IValueInfo <string> LengthIsInRange( this IValueInfo <string> valueInfo, int minLength, int maxLength, string?message = null) { if ((valueInfo.Value.Length < minLength) || (valueInfo.Value.Length > maxLength)) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message, new IndexOutOfRangeException()); } return(valueInfo); }
/// <summary> /// 验证对象是否满足条件。 /// </summary> /// <typeparam name="T">待验证的对象的类型。</typeparam> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="condition">对象应满足的条件。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"> /// <paramref name="condition"/> 返回 <see langword="false"/>。</exception> public static IValueInfo <T> MatchesCondition <T>( this IValueInfo <T> valueInfo, bool condition, string?message = null) { if (condition) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message); } return(valueInfo); }
/// <summary> /// 验证字符串是否不匹配指定的正则表达式。 /// </summary> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="regex">不应匹配的正则表达式。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"> /// <paramref name="valueInfo"/> 的值能够匹配 <paramref name="regex"/>。</exception> public static IValueInfo <string> IsNotMatch( this IValueInfo <string> valueInfo, Regex regex, string?message = null) { if (regex.IsMatch(valueInfo.Value)) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message); } return(valueInfo); }
/// <summary> /// 验证集合中元素的数量是否在指定范围内。 /// </summary> /// <typeparam name="T">待验证的集合中的元素的类型。</typeparam> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="minCount">集合允许的最小元素数量。</param> /// <param name="maxCount">集合允许的最大元素数量。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"><paramref name="valueInfo"/> 的值的元素数量不在 /// <paramref name="minCount"/> 和 <paramref name="maxCount"/> 之间。</exception> public static IValueInfo <IEnumerable <T> > CountIsInRange <T>( this IValueInfo <IEnumerable <T> > valueInfo, int minCount, int maxCount, string?message = null) { if ((valueInfo.Value.Count() < minCount) || (valueInfo.Value.Count() > maxCount)) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message, new IndexOutOfRangeException()); } return(valueInfo); }
/// <summary> /// 验证集合是否不为空集合。 /// </summary> /// <typeparam name="T">待验证的集合中的元素的类型。</typeparam> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"> /// <paramref name="valueInfo"/> 的值为一个空集合。</exception> public static IValueInfo <IEnumerable <T> > IsNotEmpty <T>( this IValueInfo <IEnumerable <T> > valueInfo, string?message = null) { if (!valueInfo.Value.Any()) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message); } return(valueInfo); }
/// <summary> /// 验证对象是否不等于 <see langword="null"/>。 /// </summary> /// <typeparam name="T">待验证的对象的类型。</typeparam> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentNullException"> /// <paramref name="valueInfo"/> 的值等于 <see langword="null"/>。</exception> public static IValueInfo <T> NotEqualsToNull <T>( this IValueInfo <T> valueInfo, string?message = null) { if (object.Equals(valueInfo.Value, null)) { ThrowHelper.ThrowArgumentNullException(valueInfo.Name, message); } return(valueInfo); }
/// <summary> /// 验证对象是否不包含在指定集合中。 /// </summary> /// <typeparam name="T">待验证的对象的类型。</typeparam> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="collection">不应包含当前对象的集合。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"> /// <paramref name="valueInfo"/> 的值在 <paramref name="collection"/> 中。</exception> public static IValueInfo <T> IsNotInCollection <T>( this IValueInfo <T> valueInfo, IEnumerable <T> collection, string?message = null) { if (!collection.Contains(valueInfo.Value)) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message); } return(valueInfo); }
/// <summary> /// 验证字符串是否不是由空白字符 (参见 <see cref="char.IsWhiteSpace(char)"/>) 组成。 /// </summary> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"> /// <paramref name="valueInfo"/> 的值由空白字符组成。</exception> public static IValueInfo <string> IsNotWhiteSpace( this IValueInfo <string> valueInfo, string?message = null) { if (valueInfo.Value.All(char.IsWhiteSpace)) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message); } return(valueInfo); }
/// <summary> /// 验证字符串是否不是空字符串 <see cref="string.Empty"/>。 /// </summary> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"> /// <paramref name="valueInfo"/> 的值等于 <see cref="string.Empty"/>。</exception> public static IValueInfo <string> IsNotNullOrEmpty( this IValueInfo <string> valueInfo, string?message = null) { if (valueInfo.Value.Length == 0) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message); } return(valueInfo); }
/// <summary> /// 验证对象是否不是默认值。 /// </summary> /// <typeparam name="T">待验证的对象的类型。</typeparam> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="valueInfo"/> 的值为默认值。</exception> public static IValueInfo <T> IsNotDefault <T>( this IValueInfo <T> valueInfo, string?message = null) where T : struct { if (EqualityComparer <T> .Default.Equals(valueInfo.Value, default(T))) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message); } return(valueInfo); }
/// <summary> /// 验证整数是否在索引的有效范围内。 /// </summary> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="startIndex">索引的开始值。</param> /// <param name="endIndex">索引的结束值。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="IndexOutOfRangeException"><paramref name="valueInfo"/> 的值不在 /// <paramref name="startIndex"/> 和 <paramref name="endIndex"/> 之间。</exception> public static IValueInfo <int> IsInIndexRange( this IValueInfo <int> valueInfo, int startIndex, int endIndex, string?message = null) { if ((valueInfo.Value < startIndex) || (valueInfo.Value > endIndex)) { ThrowHelper.ThrowArgumentOutOfRangeException( valueInfo.Name, valueInfo.Value, message); } return(valueInfo); }
/// <summary> /// 验证对象是否为指定类型的实例。 /// </summary> /// <typeparam name="T">对象期望的类型。</typeparam> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"> /// <paramref name="valueInfo"/> 的值不为 <typeparamref name="T"/> 类型的实例。</exception> public static IValueInfo <object> IsInstanceOf <T>( this IValueInfo <object> valueInfo, string?message = null) { if (valueInfo.Value is not T) { ThrowHelper.ThrowArgumentException(valueInfo.Name, message, new InvalidCastException()); } return(valueInfo); }
/// <summary> /// 验证对象是否为指定类型的实例。 /// </summary> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="type">对象期望的类型。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"> /// <paramref name="valueInfo"/> 的值不为 <paramref name="type"/> 类型的实例。</exception> public static IValueInfo <object> IsInstanceOf( this IValueInfo <object> valueInfo, Type type, string?message = null) { if (!type.IsInstanceOfType(valueInfo.Value)) { ThrowHelper.ThrowArgumentException( valueInfo.Name, message, new InvalidCastException()); } return(valueInfo); }
/// <summary> /// 验证对象是否不为 <see langword="null"/>。 /// </summary> /// <typeparam name="T">待验证的对象的类型。</typeparam> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentNullException"> /// <paramref name="valueInfo"/> 的值为 <see langword="null"/>。</exception> public static IValueInfo <T> IsNotNull <T>( this IValueInfo <T> valueInfo, string?message = null) where T : class { if (valueInfo.Value is null) { ThrowHelper.ThrowArgumentNullException(valueInfo.Name, message); } return(valueInfo); }
/// <summary> /// 验证对象是否在指定范围内。 /// </summary> /// <typeparam name="T">待验证的对象的类型。</typeparam> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="minValue">允许的最小值。</param> /// <param name="maxValue">允许的最大值。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentOutOfRangeException"><paramref name="valueInfo"/> 的值不在 /// <paramref name="minValue"/> 和 <paramref name="maxValue"/> 之间。</exception> public static IValueInfo <T> IsInRange <T>( this IValueInfo <T> valueInfo, T minValue, T maxValue, string?message = null) where T : IComparable <T> { if ((valueInfo.Value.CompareTo(minValue) < 0) || (valueInfo.Value.CompareTo(maxValue) > 0)) { ThrowHelper.ThrowArgumentOutOfRangeException( valueInfo.Name, valueInfo.Value, message); } return(valueInfo); }
/// <summary> /// 验证路径是否合法。 /// </summary> /// <param name="valueInfo">要验证的对象的值和名称。</param> /// <param name="message">自定义抛出异常的消息。</param> /// <returns><paramref name="valueInfo"/> 本身。</returns> /// <exception cref="ArgumentException"> /// <paramref name="valueInfo"/> 的值不为一个合法路径。</exception> public static IValueInfo <string> IsValidPath( this IValueInfo <string> valueInfo, string?message = null) { try { Path.GetFullPath(valueInfo.Value); } catch (Exception e) { message ??= e.Message; ThrowHelper.ThrowArgumentException(valueInfo.Name, message, e); } return(valueInfo); }
protected BaseValue(T value, IValueInfo info, ValueValidator <T> validator) { this.Info = info; // Set validator first since this.Value calls the validator. this.Validator = i => { if (i != null && i.GetType().IsArray) { throw new ArgumentException($"Use {typeof(BaseArrayValue<>)} for array types."); } return(validator == null ? true : validator(i)); }; this.Value = value; }
public static string GetUnitLabel(this IValueInfo valueInfo, bool abreviation = true, bool plural = true) { if (valueInfo != null) { if (valueInfo.Unit != null) { if (abreviation) { return(plural ? valueInfo.Unit.AbreviationPlural : valueInfo.Unit.AbreviationSingular); } return(plural ? valueInfo.Unit.NamePlural : valueInfo.Unit.NameSingular); } } return(null); }
/// <summary> /// Creates a JSON field of the form: /// "field name": "field value" /// /// This string is added to jsonFields. /// /// If value is null or empty, nothing is added. /// </summary> /// <param name="jsonFields"></param> /// <param name="jsonFieldName"> /// Name of the field, without quotes. Will not be escaped. /// </param> /// <param name="value"> /// The unescaped value. /// </param> /// <param name="valueInfo"> /// Used to validate the value, and to convert it to proper JavaScript. /// </param> internal static void AddJsonField(IList<string> jsonFields, string jsonFieldName, string value, IValueInfo valueInfo) { // null - the string has not been set in the config // "" - the string has been set in the config to "" (a valid value) if (value == null) { return; } try { AddJsonField(jsonFields, jsonFieldName, valueInfo.ToJavaScript(value)); } catch (Exception e) { throw new PropertyException(jsonFieldName, e); } }
protected bool IsOnly(IValueInfo info, string what) { HashSet<string> testFor = new HashSet<string>(what.Split(',')); foreach (string val in testFor) { if (!val.IsOneOf("","separator","attribute","alpha", "alphanumeric", "bound", "lower", "upper", "whitespace", "operator", "parenthesis","numericext","numeric")) { throw new ArgumentException("Invalid parameter passed to IsOnly"); } } bool valid=true; valid &= (testFor.Contains("alpha")) ? info.Alpha : !info.Alpha; valid &= testFor.Contains("alphanumeric") ? info.Alphanumeric : !info.Alphanumeric; valid &= testFor.Contains("numeric") ? info.Numeric : !info.Numeric; valid &= testFor.Contains("numericext") ? info.NumericExtended : !info.NumericExtended; valid &= testFor.Contains("lower") ? info.Lower : !info.Lower; valid &= testFor.Contains("upper") ? info.Upper : !info.Upper; valid &= testFor.Contains("whitespace") ? info.Whitespace : !info.Whitespace; valid &= testFor.Contains("operator") ? info.Operator : !info.Operator; if (info is ICharacterInfo) { var cInfo = (ICharacterInfo)info; valid &= testFor.Contains("parenthesis") ? cInfo.Parenthesis : !cInfo.Parenthesis; valid &= testFor.Contains("quote") ? cInfo.Quote : !cInfo.Quote; valid &= testFor.Contains("bound") ? cInfo.Bound : !cInfo.Bound; valid &= testFor.Contains("separator") ? cInfo.Separator : !cInfo.Separator; } if (info is IStringInfo) { var sInfo = (IStringInfo)info; valid &= testFor.Contains("attribute") ? sInfo.HtmlAttributeName : !sInfo.HtmlAttributeName; } return valid; }
public Value(IEnumerable<string> textCollection, IValueInfo valueInfo) { TextCollection = textCollection; ValueInfo = valueInfo; }
public Value(string text, IValueInfo valueInfo) { Text = text; ValueInfo = valueInfo; }
// valueInfo will be applied to each individual string in value internal static void AddJsonField(IList<string> jsonFields, string jsonFieldName, IEnumerable<string> value, IValueInfo valueInfo) { try { // If an element in value is null, don't include it in the field. This can be used to create an empty array. AddJsonField(jsonFields, jsonFieldName, ToJavaScript(value.Where(v=>v != null).Select(v=>valueInfo.ToJavaScript(v)))); } catch (Exception e) { throw new PropertyException(jsonFieldName, e); } }