2010-06-21 12 views
5

Gibt es eine Möglichkeit Reflexion in .net zu verwenden wie so den Wert einer Eigenschaft mit einem Pfad zu bekommen ...Reflection mit Pfadzeichenfolgen in .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") 

Sorry für die F #. Dies funktioniert offensichtlich nicht, aber es veranschaulicht, was ich versuche zu tun. Ich könnte dafür einen rekursiven Algorithmus schreiben, aber weiß jemand einen Mechanismus in der API, um dies zu erreichen?

+0

Dieses ähnlich ist zu Java [JXPath] (http://commons.apache.org/jxpath/). Ich kenne keine Entsprechung für .NET. –

Antwort

0

Sie können DataBinder.Eval verwenden, um dynamisch Pfad Ausdrücke auswerten (obwohl dies eine Abhängigkeit System.Web bedeuten Zugabe):

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

C# Beispiel:

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

Leider kann ich das nicht verwenden, da ich eine Siverlight App in F # schreibe. – PhilBrown

0

Leider gibt es keine integrierte Methode, um damit umzugehen. Es wäre sehr schwierig und fehleranfällig, da es hier viele Optionen gibt ("st" könnte null sein, ein anderer Typ zur Laufzeit, wenn es als System.Object usw. definiert ist).

Sie müssen damit umgehen, indem Sie die Eigenschaften rekursiv durchlaufen.

Verwandte Themen