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)); }
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; }
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)); } }
/// <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)); } } }
public static TValue?SubstituteDefault <TValue>(this ArgumentPlaceholder <TValue> arg) where TValue : struct => arg.HasExplicitValue ? arg.ExplicitValue : default(TValue?);
public static TValue?Substitute <TValue>(this ArgumentPlaceholder <TValue> arg, TValue?value) where TValue : struct => arg.HasExplicitValue ? arg.ExplicitValue : value;
// 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); }
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); }
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); } }
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); }
// 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; }