Пользуюсь таким решением:
/// <summary>
/// Склонение существительных после числительных.
/// </summary>
/// <param name="iNumber">Число</param>
/// <param name="aEndings">Массив слов или окончаний для чисел (1, 4, 5)</param>
/// <returns>Вовращает вариант окончания или слова для числительного</returns>
public static string GetNumEnding(long iNumber, string[] aEndings)
{
string sEnding;
iNumber = iNumber%100;
if (iNumber >= 11 && iNumber <= 19)
{
sEnding = aEndings[2];
}
else
{
var i = iNumber%10;
switch (i)
{
case (1):
sEnding = aEndings[0];
break;
case (2):
case (3):
case (4):
sEnding = aEndings[1];
break;
default:
sEnding = aEndings[2];
break;
}
}
return sEnding;
}
Пример:
GetNumEnding(notices.Count, new[] {"объявление", "объявления", "объявлений"})