Tengo un conjunto de herramientas que tiene muchos métodos que a menudo toman Expression<Func<T,TProperty>>
como parámetros. Algunos pueden ser de un solo nivel (o=>o.Name
), mientras que otros pueden ser de varios niveles (o=>o.EmployeeData.Address.Street
).¿Roslyn es la herramienta adecuada para una comprobación de expresiones en tiempo de compilación?
Quiero desarrollar algo (MSBuild Task? Visual Studio Plugin? Con suerte el primero) que lee todos los archivos .cs del usuario y genera errores de compilación si el parámetro no es una expresión de propiedad (pero algo así como o=>o.Contains("foo")
) , o si se da una expresión de niveles múltiples donde solo se permite un nivel único.
he intentado mirar el código IL compilado principio, pero ya que los árboles de expresión son un compilador de C# "truco", en la IL todo lo que veo es la creación de instancias de expresión y tal, y mientras podía verificación de cada uno si sólo MemberExpressions (y el número correcto de ellos) se crean, no es tan bueno.
Entonces Roslyn vino a mi mente. ¿Es posible escribir algo como esto con Roslyn?
¿Por qué necesita hacer cumplir estas limitaciones? –
porque las cosas que hago en estos métodos (gestión de cambio de propiedad, comprobación de errores, etc.) solo tienen sentido en las expresiones de propiedad – TDaver
y porque esto se sintió como algo interesante de hacer :) – TDaver