2012-08-01 4 views
18

He tenido una solicitud para ver la posibilidad de reemplazar todos los usos de operador de cadena == en una base de código C# razonablemente grande con llamadas de método String.Equals() que especifican explícitamente mayúsculas y minúsculas .Encontrar usos de cadena == operador en una gran base de código

No he tenido mucha suerte en descubrir una forma de identificar todas las ocurrencias en la base de código, sin embargo.

  • La búsqueda de "==" obviamente encuentra incontables instancias de tipos distintos de cadenas que se comparan.
  • No parece haber una regla de StyleCop para encontrar esto.
  • Ni una regla de ReSharper.
  • Como último recurso Probé la carga de los ensamblajes en JustDecompile y la búsqueda de todos los usos de System.String.op_Equality pero eso no parece recoger los usos dentro de las expresiones LINQ como .Where(x => x.StringField == stringField)

Así que estoy un poco perplejo y se preguntó si alguien tenía alguna idea sobre cómo buscar estas molestas comparaciones?

+4

Estaría muy interesado en saber por qué se le solicitó que investigara tal cosa. Parece un uso terriblemente improductivo de su tiempo ... ¿Es esto una cuestión de "cumplimiento de documentos estándar"? –

+0

¿Por qué 'buscar" == "encuentra innumerables instancias de tipos distintos de cadenas que se comparan'? ¿Cuáles son esos otros 'tipos'? –

+0

@NikhilAgrawal ¿Qué pasa si son variables de cadena y no cadenas mágicas? –

Respuesta

11

Puede usar Resharper para encontrar todos los usos. Esto es lo que funciona para mí:

  1. Haga clic derecho en el tipo de cadena en cualquier lugar de su código. Haga clic en Vaya a la declaración.
  2. ReSharper se abrirá string.cs del marco .NET
  3. de desplazamiento hacia abajo para operator == y haga clic derecho, seleccione Encuentra Usos

Se necesita un poco de tiempo, pero obtendrá una lista agradable de usos, ordenados en una vista de árbol. Intenté esto con Resharper 6.1 en VS2010.

ACTUALIZACIÓN

Hay una manera más sencilla de hacer esto:

  1. Seleccionar == en una comparación de cadenas
  2. Haga clic derecho sobre la selección y elija Encuentra Usos avanzada
  3. En el cuadro de diálogo debajo de Buscar, solo verifique 'Usos' y configure el alcance en 'Solución' para filtrar cualquier referencia en otras librerías.
+0

Muy bonito. Supera mi respuesta por millas :) – davenewza

+0

Buena sugerencia. Sin embargo, cuando pruebo esto en VS2012RC y R # 7, y hago clic derecho en 'operator ==' la opción _Find Usages_ está deshabilitada. En realidad, _Find Usages_ parece estar deshabilitado para todos los métodos en el archivo de metadatos _String.cs_. ¿Estoy haciendo algo mal? –

+0

Gracias por el consejo, pero no pude hacer que esto funcione. "Buscar usos" (supongamos que eso es lo que quería decir, no tengo un elemento de menú "Mostrar usos") explora todos los archivos de código en mi solución, pero luego en sus resultados, solo me da 1432 usos en las bibliotecas a las que hace referencia. básicamente festoneado en el espacio de nombres 'System'. Nada de mi código. – Carson63000

0

Mi consejo sería escribir un analizador de código muy básico y específico que atraviesa a través de cada ámbito en el sistema, el registro de todos string/String declaraciones de variables y detectar cualquier == comparaciones utilizando esas variables.

Cualquier persona con un conocimiento más profundo sobre el análisis de código es bienvenido a comentar. Estoy seguro de que hay algunas clases/herramientas que se podrían usar.

Cuestiones relacionadas