Ejemplo n.º 1
0
 public static IUnhandledExceptionObserver CreateObserver(
     Func <Exception, object, string, IContext, bool> observe,
     ArgumentPlaceholder <object> component      = default,
     ArgumentPlaceholder <string> message        = default,
     ArgumentPlaceholder <IContext> exceptionCtx = default)
 {
     //
     observe.EnsureNotNull(nameof(observe));
     //
     return(new P_DelegatedUnhandledExceptionObserver(observe: observe, component: component, message: message, exceptionCtx: exceptionCtx));
 }
Ejemplo n.º 2
0
 internal P_DelegatedUnhandledExceptionObserver(
     Func <Exception, object, string, IContext, bool> observe,
     ArgumentPlaceholder <object> component      = default,
     ArgumentPlaceholder <string> message        = default,
     ArgumentPlaceholder <IContext> exceptionCtx = default)
 {
     //
     _observe      = observe;
     _component    = component;
     _message      = message;
     _exceptionCtx = exceptionCtx;
 }
Ejemplo n.º 3
0
 public static IUnhandledExceptionObserver DeriveObserver(
     this IUnhandledExceptionObserver baseObserver,
     ArgumentPlaceholder <object> component      = default,
     ArgumentPlaceholder <string> message        = default,
     ArgumentPlaceholder <IContext> exceptionCtx = default)
 {
     //
     if (baseObserver is null)
     {
         return(null);
     }
     else
     {
         return(new P_DelegatedUnhandledExceptionObserver(observe: baseObserver.ObserveException, component: component, message: message, exceptionCtx: exceptionCtx));
     }
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Возвращает подстроку после последнего вхождения указанного символа <paramref name="chr"/>.
 /// <para>Если входная строка есть <see langword="null"/>, то метод возвращает либо явно заданное значение <paramref name="defaultStr"/>, либо <paramref name="str"/>.</para>
 /// <para>Если последнее вхождение символа <paramref name="chr"/> соответствует последнему символу входной строки, то метод возвращает <see cref="string.Empty"/>.</para>
 /// <para>Если символ <paramref name="chr"/> отсутствует во входной строке, то метод возвращает либо явно заданное значение <paramref name="defaultStr"/>, либо <paramref name="str"/>.</para>
 /// </summary>
 /// <param name="str">
 /// Входная строка.
 /// <para>Может быть <see langword="null"/>.</para>
 /// </param>
 /// <param name="chr">Символ.</param>
 /// <param name="defaultStr">
 /// Строка, возвращаемая в случае, если во входной строке указанный символ <paramref name="chr"/> отсутствует, либо входная строка есть <see langword="null"/>.
 /// </param>
 /// <returns>Объект <see cref="string"/>.</returns>
 public static string SubstringAfterLast(this string str, char chr, ArgumentPlaceholder <string> defaultStr = default)
 {
     if (str is null)
     {
         return(defaultStr.Substitute(str));
     }
     else
     {
         var index = str.LastIndexOf(chr);
         if (index < 0)
         {
             return(defaultStr.Substitute(str));
         }
         else if (index == str.Length - 1)
         {
             return(string.Empty);
         }
         else
         {
             return(str.Substring(index + 1));
         }
     }
 }
Ejemplo n.º 5
0
 public static TValue?SubstituteDefault <TValue>(this ArgumentPlaceholder <TValue> arg)
     where TValue : struct
 => arg.HasExplicitValue ? arg.ExplicitValue : default(TValue?);
Ejemplo n.º 6
0
 public static TValue?Substitute <TValue>(this ArgumentPlaceholder <TValue> arg, TValue?value)
     where TValue : struct
 => arg.HasExplicitValue ? arg.ExplicitValue : value;
Ejemplo n.º 7
0
 // TODO: Put strings into the resources.
 //
 public static ArgumentUtilitiesHandle <string> EnsureMatchRegex(this ArgumentUtilitiesHandle <string> hnd, string regexPattern, ArgumentPlaceholder <RegexOptions> options = default)
 {
     regexPattern.Arg(nameof(regexPattern)).EnsureNotNullOrEmpty();
     if (hnd.Value is null || (options.HasExplicitValue ? Regex.IsMatch(input: hnd.Value, pattern: regexPattern, options: options.ExplicitValue) : Regex.IsMatch(input: hnd.Value, pattern: regexPattern)))
     {
         return(hnd);
     }
Ejemplo n.º 8
0
 internal P_ExceptionData(P_ExceptionData source = default, ArgumentPlaceholder <IErrorCode> errorCode = default, ArgumentPlaceholder <bool> isObserved = default)
 {
     _errorCode  = errorCode.HasExplicitValue ? errorCode.ExplicitValue : source?._errorCode;
     _isObserved = isObserved.HasExplicitValue ? isObserved.ExplicitValue : (source?._isObserved ?? false);
 }
Ejemplo n.º 9
0
 public static (DateTimeOffset?from, DateTimeOffset?until) GetDatePeriod(this DateTimeOffset?referenceDateTime, DatePeriodKind?kind, ArgumentPlaceholder <DayOfWeek> firstDayOfWeek = default)
 {
     if (referenceDateTime.HasValue && kind.HasValue)
     {
         GetDatePeriod(referenceDateTime: referenceDateTime.Value, kind: kind.Value, periodFrom: out var locPeriodFrom, periodUntil: out var locPeriodUntil, firstDayOfWeek: firstDayOfWeek);
         return(from : locPeriodFrom, until : locPeriodUntil);
     }
     else
     {
         return(from : null, until : null);
     }
 }
Ejemplo n.º 10
0
 public static (DateTimeOffset?from, DateTimeOffset?until) GetDatePeriod(this DateTimeOffset referenceDateTime, DatePeriodKind kind, ArgumentPlaceholder <DayOfWeek> firstDayOfWeek = default)
 {
     GetDatePeriod(referenceDateTime: referenceDateTime, kind: kind, periodFrom: out var periodFrom, periodUntil: out var periodUntil, firstDayOfWeek: firstDayOfWeek);
     return(from : periodFrom, until : periodUntil);
 }
Ejemplo n.º 11
0
        // TODO: Put strings into the resources.
        //
        public static void GetDatePeriod(this DateTimeOffset referenceDateTime, DatePeriodKind kind, out DateTimeOffset periodFrom, out DateTimeOffset periodUntil, ArgumentPlaceholder <DayOfWeek> firstDayOfWeek = default)
        {
            if (kind == DatePeriodKind.Any)
            {
                throw new ArgumentOutOfRangeException(nameof(kind));
            }
            //
            DateTimeOffset locPeriodFrom, locPeriodUntil;
            var            locFirstDayOfWeek = firstDayOfWeek.Substitute(value: CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek);
            var            referenceDate     =
                new DateTimeOffset(
                    year: referenceDateTime.Year,
                    month: referenceDateTime.Month,
                    day: referenceDateTime.Day,
                    hour: 0,
                    minute: 0,
                    second: 0,
                    offset: referenceDateTime.Offset);
            var referenceDateUntil = referenceDate.AddDays(1.0D);

            switch (kind)
            {
            case DatePeriodKind.CurrentMonth:
                locPeriodFrom  = new DateTimeOffset(referenceDate.Year, referenceDate.Month, 1, 0, 0, 0, referenceDate.Offset);
                locPeriodUntil = locPeriodFrom.AddMonths(1);
                break;

            case DatePeriodKind.CurrentDay:
                locPeriodFrom  = referenceDate;
                locPeriodUntil = locPeriodFrom.AddDays(1.0);
                break;

            case DatePeriodKind.CurrentWeek:
                locFirstDayOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
                locPeriodFrom     = referenceDate.AddDays(-(NumberOfDayOfWeek(referenceDate.DayOfWeek, locFirstDayOfWeek) - 1));
                locPeriodUntil    = locPeriodFrom.AddDays(7.0);
                break;

            case DatePeriodKind.CurrentQuarter:
                locPeriodFrom  = new DateTimeOffset(referenceDate.Year, (int)Math.Ceiling(referenceDate.Month / 3.0D) * 3, 1, 0, 0, 0, referenceDate.Offset).AddMonths(-2);
                locPeriodUntil = locPeriodFrom.AddMonths(3);
                break;

            case DatePeriodKind.CurrentHalfOfYear:
                locPeriodFrom  = referenceDate.Month > 6 ? new DateTimeOffset(referenceDate.Year, 7, 1, 0, 0, 0, referenceDate.Offset) : new DateTimeOffset(referenceDate.Year, 1, 1, 0, 0, 0, referenceDate.Offset);
                locPeriodUntil = locPeriodFrom.AddMonths(6);
                break;

            case DatePeriodKind.CurrentYear:
                locPeriodFrom  = new DateTimeOffset(referenceDate.Year, 1, 1, 0, 0, 0, referenceDate.Offset);
                locPeriodUntil = locPeriodFrom.AddYears(1);
                break;

            case DatePeriodKind.BeginOfMonth:
                locPeriodFrom  = new DateTimeOffset(referenceDate.Year, referenceDate.Month, 1, 0, 0, 0, referenceDate.Offset);
                locPeriodUntil = referenceDateUntil;
                break;

            case DatePeriodKind.BeginOfWeek:
                locPeriodFrom  = referenceDate.AddDays(-(DateTimeUtilities.NumberOfDayOfWeek(referenceDate.DayOfWeek, locFirstDayOfWeek) - 1));
                locPeriodUntil = referenceDateUntil;
                break;

            case DatePeriodKind.BeginOfQuarter:
                locPeriodFrom  = new DateTimeOffset(referenceDate.Year, (int)Math.Ceiling(referenceDate.Month / 3.0D) * 3, 1, 0, 0, 0, referenceDate.Offset).AddMonths(-2);
                locPeriodUntil = referenceDate;
                break;

            case DatePeriodKind.BeginOfHalfOfYear:
                locPeriodFrom  = referenceDate.Month > 6 ? new DateTimeOffset(referenceDate.Year, 7, 1, 0, 0, 0, referenceDate.Offset) : new DateTimeOffset(referenceDate.Year, 1, 1, 0, 0, 0, referenceDate.Offset);
                locPeriodUntil = referenceDateUntil;
                break;

            case DatePeriodKind.BeginOfYear:
                locPeriodFrom  = new DateTimeOffset(referenceDate.Year, 1, 1, 0, 0, 0, referenceDate.Offset);
                locPeriodUntil = referenceDateUntil;
                break;

            case DatePeriodKind.PreviousDay:
                locPeriodFrom  = referenceDate.AddDays(-1);
                locPeriodUntil = referenceDate;
                break;

            case DatePeriodKind.PreviousWeek:
                locPeriodFrom  = referenceDate.AddDays(-(NumberOfDayOfWeek(referenceDate.DayOfWeek, locFirstDayOfWeek) + 6));
                locPeriodUntil = locPeriodFrom.AddDays(7.0);
                break;

            case DatePeriodKind.PreviousMonth:
                locPeriodFrom  = new DateTimeOffset(referenceDate.Year, referenceDate.Month, 1, 0, 0, 0, 0, referenceDate.Offset).AddMonths(-1);
                locPeriodUntil = locPeriodFrom.AddMonths(1);
                break;

            case DatePeriodKind.PreviousQuarter:
                locPeriodFrom  = new DateTimeOffset(referenceDate.Year, (int)Math.Ceiling(referenceDate.Month / 3.0D) * 3, 1, 0, 0, 0, referenceDate.Offset).AddMonths(-5);
                locPeriodUntil = locPeriodFrom.AddMonths(3);
                break;

            case DatePeriodKind.PreviousHalfOfYear:
                locPeriodFrom  = referenceDate.Month > 6 ? new DateTimeOffset(referenceDate.Year, 7, 1, 0, 0, 0, referenceDate.Offset).AddMonths(-6) : new DateTimeOffset(referenceDate.Year, 1, 1, 0, 0, 0, referenceDate.Offset).AddMonths(-6);
                locPeriodUntil = locPeriodFrom.AddMonths(6);
                break;

            case DatePeriodKind.PreviousYear:
                locPeriodFrom  = new DateTimeOffset(referenceDate.Year, 1, 1, 0, 0, 0, referenceDate.Offset).AddYears(-1);
                locPeriodUntil = locPeriodFrom.AddYears(1);
                break;

            case DatePeriodKind.NextDay:
                locPeriodFrom  = referenceDate.AddDays(1);
                locPeriodUntil = locPeriodFrom.AddDays(1);
                break;

            case DatePeriodKind.NextWeek:
                locPeriodFrom  = referenceDate.AddDays(-(NumberOfDayOfWeek(referenceDate.DayOfWeek, locFirstDayOfWeek) - 8));
                locPeriodUntil = locPeriodFrom.AddDays(7.0);
                break;

            case DatePeriodKind.NextMonth:
                locPeriodFrom  = new DateTimeOffset(referenceDate.Year, referenceDate.Month, 1, 0, 0, 0, 0, referenceDate.Offset).AddMonths(1);
                locPeriodUntil = locPeriodFrom.AddMonths(1);
                break;

            case DatePeriodKind.NextQuarter:
                locPeriodFrom  = new DateTimeOffset(referenceDate.Year, (int)Math.Ceiling(referenceDate.Month / 3.0D) * 3, 1, 0, 0, 0, referenceDate.Offset).AddMonths(1);
                locPeriodUntil = locPeriodFrom.AddMonths(3);
                break;

            case DatePeriodKind.NextHalfOfYear:
                locPeriodFrom  = referenceDate.Month > 6 ? new DateTimeOffset(referenceDate.Year, 7, 1, 0, 0, 0, referenceDate.Offset).AddMonths(6) : new DateTimeOffset(referenceDate.Year, 1, 1, 0, 0, 0, referenceDate.Offset).AddMonths(6);
                locPeriodUntil = locPeriodFrom.AddMonths(6);
                break;

            case DatePeriodKind.NextYear:
                locPeriodFrom  = new DateTimeOffset(referenceDate.Year, 1, 1, 0, 0, 0, referenceDate.Offset).AddYears(1);
                locPeriodUntil = locPeriodFrom.AddYears(1);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(kind), $"Значение '{kind}' (тип '{kind.GetType().FullName}' не поддерживается).");
            }
            periodFrom  = locPeriodFrom;
            periodUntil = locPeriodUntil;
        }