2010-06-21 5 views
5

Est-il possible d'utiliser la réflexion en .net pour obtenir une valeur de la propriété en utilisant un chemin comme si ...réflexion en utilisant des chaînes de chemin dans .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") 

Désolé pour le F #. Cela ne fonctionne pas évidemment mais cela illustre ce que j'essaie de faire. Je pourrais écrire un algorithme récursif pour cela mais est-ce que quelqu'un connaît un mécanisme dans l'API pour accomplir ceci?

+0

Ceci est similaire à Java [JXPath] (http://commons.apache.org/jxpath/). Je ne connais pas d'équivalent pour .NET. –

Répondre

0

Vous pouvez utiliser DataBinder.Eval pour évaluer dynamiquement des expressions de chemin (bien que cela se traduira par l'ajout d'une dépendance à System.Web):

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

C# Exemple:

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

Malheureusement, je ne peux pas l'utiliser car j'écris une application siverlight en F # – PhilBrown

0

Malheureusement, il n'existe pas de méthode intégrée pour gérer cela. Ce serait très difficile et sujet aux erreurs, car il y a beaucoup d'options ici ("st" pourrait être nul, un type différent à l'exécution s'il est défini comme System.Object, etc ...).

Vous devrez gérer cela en marchant récursivement les propriétés.

Questions connexes