Advertisement
Doomer3D

WordForm.cs

Nov 8th, 2020
778
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.96 KB | None | 0 0
  1. using System;
  2.  
  3. namespace Genesis.Helpers
  4. {
  5.     /// <summary>
  6.     /// класс для формирования строк с числительными
  7.     /// </summary>
  8.     public static class WordForm
  9.     {
  10.         /// <summary>
  11.         /// выбрать корректную форму слова для числительного
  12.         /// </summary>
  13.         /// <param name="count"> число </param>
  14.         /// <param name="form0"> форма 0 (ноль окон) </param>
  15.         /// <param name="form1"> форма 1 (одно окно) </param>
  16.         /// <param name="form2"> форма 2 (два окна) </param>
  17.         /// <returns></returns>
  18.         public static string Get(int count, string form0, string form1, string form2)
  19.         {
  20.             if ((count / 10) % 10 == 1)
  21.             {
  22.                 return form0;
  23.             }
  24.             else
  25.             {
  26.                 switch (count % 10)
  27.                 {
  28.                     case 1:
  29.                         return form1;
  30.                     case 2:
  31.                     case 3:
  32.                     case 4:
  33.                         return form2;
  34.                     default:
  35.                         return form0;
  36.                 }
  37.             }
  38.         }
  39.  
  40.         /// <summary>
  41.         /// выбрать корректную форму слова для числительного
  42.         /// </summary>
  43.         /// <param name="count"> число </param>
  44.         /// <param name="forms"> массив форм </param>
  45.         /// <returns></returns>
  46.         public static string Get(int count, string[] forms)
  47.         {
  48.             if (forms == null || !(forms.Length == 1 || forms.Length == 3))
  49.             {
  50.                 throw new ArgumentException("Передано неверное число форм слова", "forms");
  51.             }
  52.             else if (forms.Length == 1)
  53.             {
  54.                 return Get(count, forms[0], forms[0], forms[0]);
  55.             }
  56.             else
  57.             {
  58.                 return Get(count, forms[0], forms[1], forms[2]);
  59.             }
  60.         }
  61.  
  62.         /// <summary>
  63.         /// выбрать корректную форму слова для числительного и записать в форматированном виде
  64.         /// </summary>
  65.         /// <param name="format"> строка формата </param>
  66.         /// <param name="count"> число </param>
  67.         /// <param name="form0"> форма 0 (ноль окон) </param>
  68.         /// <param name="form1"> форма 1 (одно окно) </param>
  69.         /// <param name="form2"> форма 2 (два окна) </param>
  70.         /// <returns></returns>
  71.         public static string GetFormatted(string format, int count, string form0, string form1, string form2)
  72.         {
  73.             return string.Format(format, count, Get(count, form0, form1, form2));
  74.         }
  75.  
  76.         /// <summary>
  77.         /// выбрать корректную форму слова для числительного и записать в форматированном виде
  78.         /// </summary>
  79.         /// <param name="format"> строка формата </param>
  80.         /// <param name="count"> число </param>
  81.         /// <param name="forms"> массив форм </param>
  82.         /// <returns></returns>
  83.         public static string GetFormatted(string format, int count, string[] forms)
  84.         {
  85.             return string.Format(format, count, Get(count, forms));
  86.         }
  87.  
  88.         /// <summary>
  89.         /// выбрать корректную форму слова для числительного и записать в виде числа с формой
  90.         /// </summary>
  91.         /// <param name="count"> число </param>
  92.         /// <param name="form0"> форма 0 (ноль окон) </param>
  93.         /// <param name="form1"> форма 1 (одно окно) </param>
  94.         /// <param name="form2"> форма 2 (два окна) </param>
  95.         /// <returns></returns>
  96.         public static string GetAsCount(int count, string form0, string form1, string form2) => $"{count} {Get(count, form0, form1, form2)}";
  97.  
  98.         /// <summary>
  99.         /// выбрать корректную форму слова для числительного и записать в виде числа с формой
  100.         /// </summary>
  101.         /// <param name="count"> число </param>
  102.         /// <param name="forms"> массив форм </param>
  103.         /// <returns></returns>
  104.         public static string GetAsCount(int count, string[] forms) => $"{count} {Get(count, forms)}";
  105.  
  106.         #region Long Forms
  107.  
  108.         /// <summary>
  109.         /// выбрать корректную форму слова для числительного
  110.         /// </summary>
  111.         /// <param name="count"> число </param>
  112.         /// <param name="form0"> форма 0 (ноль окон) </param>
  113.         /// <param name="form1"> форма 1 (одно окно) </param>
  114.         /// <param name="form2"> форма 2 (два окна) </param>
  115.         /// <returns></returns>
  116.         public static string Get(long count, string form0, string form1, string form2)
  117.         {
  118.             if ((count / 10) % 10 == 1)
  119.             {
  120.                 return form0;
  121.             }
  122.             else
  123.             {
  124.                 switch (count % 10)
  125.                 {
  126.                     case 1:
  127.                         return form1;
  128.                     case 2:
  129.                     case 3:
  130.                     case 4:
  131.                         return form2;
  132.                     default:
  133.                         return form0;
  134.                 }
  135.             }
  136.         }
  137.  
  138.         /// <summary>
  139.         /// выбрать корректную форму слова для числительного
  140.         /// </summary>
  141.         /// <param name="count"> число </param>
  142.         /// <param name="forms"> массив форм </param>
  143.         /// <returns></returns>
  144.         public static string Get(long count, string[] forms)
  145.         {
  146.             if (forms == null || !(forms.Length == 1 || forms.Length == 3))
  147.             {
  148.                 throw new ArgumentException("Передано неверное число форм слова", "forms");
  149.             }
  150.             else if (forms.Length == 1)
  151.             {
  152.                 return Get(count, forms[0], forms[0], forms[0]);
  153.             }
  154.             else
  155.             {
  156.                 return Get(count, forms[0], forms[1], forms[2]);
  157.             }
  158.         }
  159.  
  160.         /// <summary>
  161.         /// выбрать корректную форму слова для числительного и запись в форматированном виде
  162.         /// </summary>
  163.         /// <param name="format"> строка формата </param>
  164.         /// <param name="count"> число </param>
  165.         /// <param name="form0"> форма 0 (ноль окон) </param>
  166.         /// <param name="form1"> форма 1 (одно окно) </param>
  167.         /// <param name="form2"> форма 2 (два окна) </param>
  168.         /// <returns></returns>
  169.         public static string GetFormatted(string format, long count, string form0, string form1, string form2)
  170.         {
  171.             return string.Format(format, count, Get(count, form0, form1, form2));
  172.         }
  173.  
  174.         /// <summary>
  175.         /// выбрать корректную форму слова для числительного и запись в форматированном виде
  176.         /// </summary>
  177.         /// <param name="format"> строка формата </param>
  178.         /// <param name="count"> число </param>
  179.         /// <param name="forms"> массив форм </param>
  180.         /// <returns></returns>
  181.         public static string GetFormatted(string format, long count, string[] forms)
  182.         {
  183.             return string.Format(format, count, Get(count, forms));
  184.         }
  185.  
  186.         #endregion
  187.     }
  188. }
  189.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement