2010-06-21 15 views
5

Czy istnieje jakiś sposób, aby przy użyciu odbicia w .NET, aby uzyskać wartości właściwości przy użyciu ścieżki tak jak ...Odbicie używając ciągi ścieżek w .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") 

Niestety dla F #. To oczywiście nie działa, ale ilustruje to, co próbuję zrobić. Mógłbym napisać algorytm rekurencyjny, ale czy ktoś wie o mechanizmie w API, aby to osiągnąć?

+0

ten jest podobny do Javy [JXPath] (http://commons.apache.org/jxpath/). Nie znam odpowiednika dla .NET. –

Odpowiedz

0

Można użyć DataBinder.Eval dynamicznie ocenia wyrażeń ścieżka (choć będzie to oznaczać dodanie zależność do system.Web):

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

C# Przykład:

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

Niestety, nie mogę tego użyć, ponieważ piszę aplikację siverlight w języku F # – PhilBrown

0

Niestety, nie ma wbudowanej metody radzenia sobie z tym. Byłoby to bardzo trudne i podatne na błędy, ponieważ istnieje wiele opcji tutaj ("st" może być wartością zerową, inny typ w czasie wykonywania, jeśli jest zdefiniowany jako System.Object, etc ...).

Musisz sobie z tym poradzić, rekurencyjnie chodząc po właściwościach.

Powiązane problemy