2010-06-21 9 views
5

¿Hay alguna manera de utilizar la reflexión en .NET para obtener el valor de una propiedad utilizando una ruta como tal ...Reflexión usando cadenas de ruta en .NET

type t { 
    id : int 
    name : string 
} 

type s { 
    id : int 
    st : t 
{ 

let a = {id = 1; {id = 2; name = "foo"}} 

a.getType().getProperty("st.name") 

Lo siento por el F #. Esto no funciona, obviamente, pero ilustra lo que estoy tratando de hacer. Podría escribir un algoritmo recursivo para esto, pero ¿alguien sabe de un mecanismo en la API para lograr esto?

+0

Esto es similar a Java [JXPath] (http://commons.apache.org/jxpath/). No conozco un equivalente para .NET. –

Respuesta

0

Puede utilizar DataBinder.Eval para evaluar dinámicamente expresiones de ruta (aunque esto va a significar la adición de una dependencia a System.Web):

http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx

C# Ejemplo:

using System; 
using System.Web.UI; 

namespace DataBinderEval 
{ 
    internal class Program 
    { 
     private static void Main() 
     { 
      object target = new s { id = 1, st = new t { id = 2, name = "foo" } }; 

      string expression = "st.name"; 

      object result = DataBinder.Eval(target, expression); 

      Console.WriteLine(result); 
     } 

     private class t 
     { 
      public int id { get; set; } 
      public string name { get; set; } 
     } 

     private class s 
     { 
      public int id { get; set; } 
      public t st { get; set; } 
     }   
    } 
} 
+0

Lamentablemente, no puedo usar esto porque estoy escribiendo una aplicación siverlight en F # – PhilBrown

0

Desafortunadamente, no hay un método incorporado para manejar esto. Sería muy difícil y propenso a errores, ya que hay muchas opciones aquí ("st" podría ser nulo, un tipo diferente en el tiempo de ejecución si está definido como System.Object, etc ...).

Tendrá que manejar esto caminando recursivamente por las propiedades.

Cuestiones relacionadas