Il motivo principale per cui Debug.Assert non mi piace è il fatto che queste affermazioni sono disabilitate in Release. So che c'è una ragione per le prestazioni, ma almeno nella mia situazione credo che i guadagni supererebbero il costo. (A proposito, immagino che questa sia la situazione nella maggior parte dei casi). E sì, so che puoi usare Trace.Assert invece. Ma anche se funzionasse, trovo il nome Trace che distrae, dal momento che non lo vedo come traccia.
L'altra ragione per creare la mia classe è la pigrizia, suppongo, dato che potrei scrivere metodi per i casi più comuni come Assert.IsNotNull, Assert.Equals e così via.
La seconda parte della mia domanda riguarda l'uso di Environment.FailFast in questa classe. Sarebbe una buona idea? Mi piacciono le idee presentate in questo documento . È praticamente da dove ho avuto l'idea.
Un ultimo punto. Creare un design come questo implica avere un percorso di codice non testabile, come descritto in questa risposta di Eric Lippert su un altro (ma relativo) domanda?