Prevedo questo con non so se qualcun altro che ha programmato fino a quando ho effettivamente questo problema, ma per lo meno, la risposta potrebbe aiutare qualcuno con meno xp.
Ho appena guardato questo codice per 5 minuti, pensando che stavo perdendo la testa che non funzionasse:
var usedNames = new HashSet<string>();
Func<string, string> l = (s) =>
{
for (int i = 0; ; i++)
{
var next = (s + i).TrimEnd('0');
if (!usedNames.Contains(next))
{
return next;
}
}
};
Finalmente ho notato che ho dimenticato di aggiungere il nome usato al set di hash.
Allo stesso modo, ho dedicato minuti e minuti a omettere context.SaveChanges ().
Penso di essere così distratto dai dettagli a cui sto pensando che alcuni dettagli davvero piccoli diventano invisibili per me - è quasi al livello del blocco mentale.
Ci sono tattiche per impedirlo?
aggiornamento: un effetto collaterale di questa domanda era la correzione dell'errore che avrebbe avuto per i > 9 (Grazie!)
var usedNames = new HashSet<string>();
Func<string, string> name = (s) =>
{
string result = s;
if(usedNames.Contains(s))
for (int i = 1; ; result = s + i++)
if (!usedNames.Contains(result))
break;
usedNames.Add(result);
return result;
};