c# リスト中に存在しない名前+連番の文字列を作成する


概要

文字列リストに新しい要素を追加する際「末尾に連番をつけて追加したい」という単純だけど、ありがちな要件の実装例です。
メインロジックの中にこうした処理を直接書いていくと、コードが膨らんでしまうために外出ししてみました。
番号が歯抜けになっていない事を前提としたコードです。

実装

Unique.cs
using System.Collections.Generic;
using System.Linq;
namespace Implem.Libraries.Utilities
{
    public static class Unique
    {
        // リスト中に存在しない名前+連番の文字列を作成する関数
        public static string New(IEnumerable<string> existing, string name, int start = 1)
        {
            var number = start;
            while(existing.Any(o => o == name + number))
            {
                number++;
            }
            return name + number;
        }
    }
}
Program.cs
using Implem.Libraries.Utilities;
using System;
using System.Collections.Generic;
namespace Implem.CodeDefiner
{
    internal class Program
    {
        // 関数の使用例
        static void Main(string[] args)
        {
            // 連番で 1, 2 が存在するリスト
            var items = new List<string> { "設定1", "設定2" };

            // リストに連番 3, 4, 5 を追加したい場合の使用例
            items.Add(Unique.New(items, "設定"));
            items.Add(Unique.New(items, "設定"));
            items.Add(Unique.New(items, "設定"));

            // 内容を出力
            foreach(var item in items)
            {
                Console.WriteLine(item);
            }
        }
    }
}
結果
設定1
設定2
設定3
設定4
設定5