- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
const string newObjectName = "Новый объект";
        // формирует имя нового объекта
        string BuildNewObjectName()
        {
            var namesTaken = from node in objectAdapters where node.Name.Contains(newObjectName) select node.Name;
            int n = 0;
            // ищем максимальное число в конце имени
            if (namesTaken.Any())
                n = namesTaken.Aggregate(n, (acc, name) =>
                    {
                        int current;
                        return (int.TryParse(name.Split().Last(), out current) && current > acc) ? current : acc;
                    });
            // возвращаем следующее
            return newObjectName + " " + (n+1).ToString();
        }
                                 
        
            Получение имени для нового объекта. Смесь различных техник. Не читаемо.
        
        
хотя можно ещё оптимизировать (но кратко - так)