Bueno, es bastante obvio, que una variable que nunca ha cambiado debe ser const o de solo lectura. La pregunta de cuál de estos es mejor depende de la situación. Las variables de Const son, por definición, constantes; sus valores deben ser NUNCA cambio (por ejemplo, const int minutesInAnHour = 60;
parece un buen candidato). Es por eso que la constante es un miembro estático implícitamente y se inicializa durante el tiempo de compilación, es decir, el compilador realmente puede reemplazar todas las apariencias de su constante con el valor literal, aunque no estoy seguro de si algún compilador realmente lo hace.
Readonly, por otro lado, es una variable miembro cuyo valor no debe cambiar, una vez inicializado, lo que significa que no es realmente una constante, puede hacer algo en las líneas de readonly DateTime time = DateTime.Now;
. Esto, por supuesto, no será un miembro estático, de hecho será un miembro normal solo con la restricción de que no se puede cambiar una vez asignado. El beneficio de esto frente a const es que si su variable const cambia en alguna compilación, es posible que otras bibliotecas de dependad no lo sepan, incluso pueden tener el valor constante compilado, tendrá que reconstruir todo.
Y en cuanto a la pregunta de por qué resharper sugiere readonly vs. const - No estoy seguro, supongo que una variable de solo lectura es menos restrictiva y supone que eso es lo que el desarrollador probablemente quería.
Es un consejo equivocado, usted hizo el campo público. Si hubiera sugerido utilizar una propiedad, entonces le habría dado buenos consejos. –