private string GetWordCase( eNumeralType numeralType, Func <string> singleCaseCallback, Func <string> twoCaseCallback, Func <string> multipleCaseCallback ) { var word = string.Empty; if (numeralType == eNumeralType.SingleType) { word = singleCaseCallback(); } else if (numeralType == eNumeralType.TwoThreeFour) { word = twoCaseCallback(); } else if (numeralType == eNumeralType.Multiple) { word = multipleCaseCallback(); } if (string.IsNullOrEmpty(word)) { word = singleCaseCallback(); } if (string.IsNullOrEmpty(word)) { word = NominativeSingle; } return(word); }
/// <summary> /// Возвращает предложный падеж в количественном варианте <paramref name="numeralType"/>. /// </summary> /// <returns> /// Возвращает <see cref="PrepositionalSingle"/> для <see cref="eNumeralType.SingleType"/>, /// <see cref="PrepositionalTwo"/> для <see cref="eNumeralType.TwoThreeFour"/> либо /// <see cref="PrepositionalMultiple"/> для <see cref="eNumeralType.Multiple"/>. /// Если <paramref name="returnSingleFormIfEmpty"/> равен true и <see cref="PrepositionalTwo"/> или <see cref="PrepositionalMultiple"/> пусто, то возвращает <see cref="PrepositionalSingle"/>. /// Если же <see cref="PrepositionalSingle"/> пусто, то возвращает <see cref="NominativeSingle"/>. /// </returns> public string GetPrepositional(eNumeralType numeralType, bool returnSingleFormIfEmpty = true) { var word = string.Empty; return(GetWordCase(numeralType, () => PrepositionalSingle, () => PrepositionalTwo, () => PrepositionalMultiple)); }
/// <summary> /// Возвращает винительный падеж в количественном варианте <paramref name="numeralType"/>. /// </summary> /// <returns> /// Возвращает <see cref="AccusativeSingle"/> для <see cref="eNumeralType.SingleType"/>, /// <see cref="AccusativeTwo"/> для <see cref="eNumeralType.TwoThreeFour"/> либо /// <see cref="AccusativeMultiple"/> для <see cref="eNumeralType.Multiple"/>. /// Если <paramref name="returnSingleFormIfEmpty"/> равен true и <see cref="AccusativeTwo"/> или <see cref="AccusativeMultiple"/> пусто, то возвращает <see cref="AccusativeSingle"/>. /// Если же <see cref="AccusativeSingle"/> пусто, то возвращает <see cref="NominativeSingle"/>. /// </returns> public string GetAccusative(eNumeralType numeralType, bool returnSingleFormIfEmpty = true) { var word = string.Empty; return(GetWordCase(numeralType, () => AccusativeSingle, () => AccusativeTwo, () => AccusativeMultiple)); }