2016-11-08 1 views
0

Ich habe eine Methode, die ich Zeichenfolge und eine Liste in übergeben. Was ich versuche zu erreichen, ist die Zeichenfolge in Lambda-Ausdruck-Eigenschaft zu konvertieren.Verwenden Sie Zeichenfolge als eine Eigenschaft in Lambda-Ausdruck C#

private someMethod(string myTypeString, List<Values> typeList) 
{ 
    foreach(var type in typeList.Where(x => x."myTypeString" > DateTime.Now)) 
    { 
     //do my loop 
    } 
} 

Gibt es eine Möglichkeit, das zu tun?

+0

Via Reflexion. – Oswald

+0

Wh an Sie gepostet wird nicht funktionieren. Sie können nicht x. "MyTypeString" haben. Sie könnten so etwas tun (x => DataTime.Parse (x.myTypeString)> DataTime.Now) – jdweng

+3

Und warum nicht die Methode um ein 'Prädikat ' zu erhalten? Sie würden keine Reflexion benötigen, Sie müssten nur den Ausdruck senden, den Sie anwenden möchten. – jorgonor

Antwort

2

können Sie versuchen, mit Reflection:

using System.Reflection; 
... 

private void someMethod(string myTypeString, List<Values> typeList) 
{ 
    PropertyInfo pi = typeof(Values) 
     .GetProperty(myTypeString, 
     System.Reflection.BindingFlags.Instance | 
     System.Reflection.BindingFlags.NonPublic | // private/internal/protected 
     System.Reflection.BindingFlags.Public); 

    // property exists, can be read and returns DateTime 
    if (null == pi) 
     return; // or throw exception 
    else if (!pi.CanRead) 
     return; // or throw exception 
    else if (pi.PropertyType != typeof(DateTime)) 
     return; // or throw exception 

    foreach(var type in typeList 
     .Where(x => (DateTime) (pi.GetValue(x, null)) > DateTime.Now)) 
    { 
     //do my loop 
    } 
} 
0
  1. diese Methode irgendwo erstellen.
 
    public static object GetPropValue(object src, string propName) 
    { 
     return src.GetType().GetProperty(propName).GetValue(src, null); 
    } 
  1. Verwenden Sie die Methode in der Lambda-Ausdruck
 private someMethod(string myTypeString, List typeList) 
    { 
     foreach(var type in typeList.Where(x => (DateTime)GetPropValue(x, myTypeString) > DateTime.Now)) 
     { 
      //do my loop 
     } 
    } 
Verwandte Themen