/// <inheritdoc/>
        public virtual bool IsAcceptableAsType(string candidateString, IDataTypeSize size)
        {
            //we must preserve leading zeroes if its not actually 0 -- if they have 010101 then we have to use string but if they have just 0 we can use decimal
            if (zeroPrefixedNumber.IsMatch(candidateString))
            {
                return(false);
            }

            return(IsAcceptableAsTypeImpl(candidateString, size));
        }
예제 #2
0
        /// <inheritdoc/>
        protected override bool IsAcceptableAsTypeImpl(string candidateString, IDataTypeSize size)
        {
            // "Y" / "N" is boolean unless the settings say it can't
            if (!Settings.CharCanBeBoolean && singleCharacter.IsMatch(candidateString))
            {
                return(false);
            }

            return(base.IsAcceptableAsTypeImpl(candidateString, size));
        }
예제 #3
0
        /// <inheritdoc/>
        protected override bool IsAcceptableAsTypeImpl(string candidateString, IDataTypeSize sizeRecord)
        {
            if (IsExplicitDate(candidateString))
            {
                return(false);
            }

            if (!candidateString.IsConvertibleTo(out int i, Culture))
            {
                return(false);
            }

            sizeRecord.Size.IncreaseTo(i.ToString().Trim('-').Length, 0);
            return(true);
        }
        /// <inheritdoc/>
        protected override bool IsAcceptableAsTypeImpl(string candidateString, IDataTypeSize sizeRecord)
        {
            try
            {
                //if it parses as a date
                if (DateTime.TryParse(candidateString, CultureInfo.CurrentCulture, DateTimeStyles.NoCurrentDateDefault, out var t))
                {
                    return(t.Year == 1 && t.Month == 1 && t.Day == 1);//without any ymd component then it's a date...  this means 00:00 is a valid TimeSpan too
                }

                return(false);
            }
            catch (Exception)
            {
                return(false);
            }
        }
예제 #5
0
        /// <inheritdoc/>
        protected override bool IsAcceptableAsTypeImpl(string candidateString, IDataTypeSize sizeRecord)
        {
            candidateString = TrimTrailingZeros(candidateString);

            if (IsExplicitDate(candidateString))
            {
                return(false);
            }

            if (!decimal.TryParse(candidateString, NumberStyles.Any, Culture, out var t))
            {
                return(false);
            }

            var dec = ((SqlDecimal)t);

            sizeRecord.Size.IncreaseTo(dec.Precision - dec.Scale, dec.Scale);

            return(true);
        }
 /// <summary>
 /// Returns true if the given <paramref name="candidateString"/> is compatible with the T Type of this decider.  This is the prefered method of overriding IsAcceptable.
 /// </summary>
 /// <param name="candidateString"></param>
 /// <param name="size"></param>
 /// <returns></returns>
 protected virtual bool IsAcceptableAsTypeImpl(string candidateString, IDataTypeSize size)
 {
     return(candidateString.IsConvertibleTo <T>(Culture));
 }
 /// <inheritdoc/>
 protected override bool IsAcceptableAsTypeImpl(string candidateString, IDataTypeSize sizeRecord)
 {
     //strings should never be interpreted as byte arrays
     return(false);
 }