Nun, es ist ziemlich offensichtlich, dass eine Variable, die nie geändert wird, entweder const oder read-only sein sollte. Die Frage, was davon besser ist, hängt von der jeweiligen Situation ab. Const-Variablen sind per Definition konstant - ihre Werte sollten NIEMALS ändern (z.B. const int minutesInAnHour = 60;
scheint ein guter Kandidat zu sein). Deshalb ist die Konstante implizit ein statisches Mitglied und wird während der Kompilierungszeit initialisiert, d.h. der Compiler könnte tatsächlich alle Erscheinungen Ihrer Konstante durch den literalen Wert ersetzen, obwohl ich nicht sicher bin, ob ein Compiler das tatsächlich tut.
Readonly hingegen ist eine Mitgliedsvariable, deren Wert sich nach der Initialisierung nicht mehr ändern sollte, was bedeutet, dass es sich nicht um eine Konstante handelt, Sie können etwas in der Art von readonly DateTime time = DateTime.Now;
. Dabei handelt es sich natürlich nicht um ein statisches Mitglied, sondern um ein normales Mitglied mit der Einschränkung, dass es nach der Zuweisung nicht mehr geändert werden kann. Der Vorteil im Vergleich zu const ist, dass wenn sich Ihre const-Variable in einem Build ändert, andere abhängige Bibliotheken das nicht wissen - sie können sogar den konstanten Wert einkompiliert haben - Sie müssen alles neu erstellen.
Und was die Frage angeht, warum resharper readonly vs. const vorschlägt - ich bin mir nicht sicher, ich würde vermuten, dass eine readonly-Variable weniger restriktiv ist, und es ist anzunehmen, dass der Entwickler das wahrscheinlich wollte.